Addition of other database components and basic API endpoints
This commit is contained in:
parent
56a100ad96
commit
2c967f701f
|
@ -1,7 +1,9 @@
|
|||
using MySql.Data.MySqlClient;
|
||||
using System;
|
||||
using System.Data;
|
||||
using Telerik.SvgIcons;
|
||||
using TSC2.Components.Layout;
|
||||
using static Telerik.Blazor.ThemeConstants;
|
||||
|
||||
namespace TSC2.Components.CSharp
|
||||
{
|
||||
|
@ -129,5 +131,93 @@ namespace TSC2.Components.CSharp
|
|||
}
|
||||
conn.Close();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**********************************************/
|
||||
// REVIEWS
|
||||
/**********************************************/
|
||||
public async static void AddReview(string shopID)
|
||||
{
|
||||
if (MainLayout.Session.Count == 0) // We only want to proceed if the user is signed in
|
||||
return;
|
||||
|
||||
MySqlConnection conn = new MySqlConnection(_connectionString);
|
||||
conn.Open();
|
||||
|
||||
// Set review ID to a combination of the user's unique id and the shop's
|
||||
var reviewID = MainLayout.Session["id"] + "~~" + shopID;
|
||||
|
||||
using (var count_cmd = new MySqlCommand("SELECT COUNT(*) FROM (SELECT * FROM reviews WHERE ReviewID='" + reviewID + "') AS result", conn))
|
||||
{
|
||||
int count = Convert.ToInt32(count_cmd.ExecuteScalar());
|
||||
if (count == 0)
|
||||
{
|
||||
try
|
||||
{
|
||||
|
||||
|
||||
// Check if a review already exists by this ID
|
||||
|
||||
var insert_cmd = new MySqlCommand();
|
||||
|
||||
insert_cmd.CommandText = "INSERT INTO reviews(ReviewID,ReviewText,ReviewScore) VALUES(@reviewid,@reviewtext,@reviewscore)";
|
||||
insert_cmd.Connection = conn;
|
||||
|
||||
insert_cmd.Parameters.AddWithValue("@reviewid", reviewID);
|
||||
insert_cmd.Parameters.AddWithValue("@reviewtext", "This is a review! Surely this will work on the Second Try!");
|
||||
insert_cmd.Parameters.AddWithValue("@reviewscore", 1);
|
||||
|
||||
insert_cmd.ExecuteNonQuery();
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
await Console.Out.WriteLineAsync(ex.Message);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
await Console.Out.WriteLineAsync("Review already exists for this user on this shop.");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
public static List<string> GetShopReviews(string shopID)
|
||||
{
|
||||
MySqlConnection conn = new MySqlConnection(_connectionString);
|
||||
conn.Open();
|
||||
|
||||
var cmd = new MySqlCommand("SELECT * FROM reviews WHERE ReviewID LIKE '%~~" + shopID + "'", conn);
|
||||
MySqlDataReader reader = cmd.ExecuteReader();
|
||||
|
||||
List<string> reviews = new();
|
||||
while (reader.Read())
|
||||
{
|
||||
var reviewText = reader.GetString(1);
|
||||
reviews.Add(reviewText);
|
||||
}
|
||||
return reviews;
|
||||
}
|
||||
|
||||
|
||||
|
||||
public static List<int> GetShopReviewScores(string shopID)
|
||||
{
|
||||
MySqlConnection conn = new MySqlConnection(_connectionString);
|
||||
conn.Open();
|
||||
|
||||
var cmd = new MySqlCommand("SELECT * FROM reviews WHERE ReviewID LIKE '%~~" + shopID + "'", conn);
|
||||
MySqlDataReader reader = cmd.ExecuteReader();
|
||||
|
||||
List<int> scores = new();
|
||||
while (reader.Read())
|
||||
{
|
||||
var reviewScore = Convert.ToInt32(reader.GetInt32(2));
|
||||
scores.Add(reviewScore);
|
||||
}
|
||||
return scores;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -0,0 +1,9 @@
|
|||
These are the API endpoints to be exposed for external consumption.
|
||||
|
||||
|
||||
|
||||
GET endpoints
|
||||
--------------------
|
||||
/api/getshopreviews?shopid={id} - returns a list of all reviews left for the specified shop
|
||||
|
||||
/api/getshopreviewscores?shopid={id} - returns a list of all review scores left for the specified shop
|
|
@ -0,0 +1,28 @@
|
|||
using Microsoft.AspNetCore.Mvc;
|
||||
using System.Text.Json;
|
||||
using TSC2.Components.CSharp;
|
||||
|
||||
namespace TSC2.Components.Controllers
|
||||
{
|
||||
[ApiController]
|
||||
[Route("api")]
|
||||
public class ReviewController : Controller
|
||||
{
|
||||
[HttpGet("GetShopReviews")]
|
||||
public IEnumerable<string> GetReviews(string shopID)
|
||||
{
|
||||
var reviews = DatabaseManager.GetShopReviews(shopID).ToArray();
|
||||
|
||||
|
||||
return reviews;
|
||||
}
|
||||
|
||||
|
||||
[HttpGet("GetShopReviewScores")]
|
||||
public IEnumerable<int> GetReviewScores(string shopID)
|
||||
{
|
||||
var scores = DatabaseManager.GetShopReviewScores(shopID).ToArray();
|
||||
return scores;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -219,13 +219,12 @@
|
|||
</TelerikButton>
|
||||
|
||||
@code {
|
||||
public void VisitClickHandler()
|
||||
{
|
||||
Console.WriteLine("Visiting page" + CurrentSelection);
|
||||
string destination = "/info/" + CurrentSelection;
|
||||
NavManager.NavigateTo(destination);
|
||||
public void VisitClickHandler()
|
||||
{
|
||||
string destination = "/info/" + CurrentSelection + "&" + CurrentUniqueID;
|
||||
NavManager.NavigateTo(destination);
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
</WindowContent>
|
||||
<WindowActions>
|
||||
|
|
|
@ -44,6 +44,8 @@ namespace TSC2.Components.Pages
|
|||
var dataItem = args.DataItem as MarkerModel;
|
||||
CurrentSelection = dataItem.Title;
|
||||
CurrentBlurb = dataItem.Blurb;
|
||||
CurrentUniqueID = dataItem.UniqueID;
|
||||
|
||||
ToggleModal();
|
||||
}
|
||||
|
||||
|
@ -137,6 +139,8 @@ namespace TSC2.Components.Pages
|
|||
public TelerikPopover? Popover { get; set; }
|
||||
public string CurrentSelection { get; set; } = "123412341234onetwothreefour";
|
||||
public string CurrentBlurb { get; set; } = "This is a blurb for a shop. I believe it is rather dastardly.";
|
||||
public string CurrentUniqueID { get; set; } = "";
|
||||
|
||||
public bool isVisible = false;
|
||||
|
||||
public void ToggleModal()
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
@page "/info/{Shop}"
|
||||
@page "/info/{Shop}&{UniqueID}"
|
||||
|
||||
|
||||
|
||||
|
@ -121,6 +121,7 @@
|
|||
<div class="col-lg-8">
|
||||
<div class="heading-block">
|
||||
<h2>Some of your Questions:</h2>
|
||||
<TelerikButton OnClick="@LeaveReviewDebug">Leave Review</TelerikButton>
|
||||
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Earum tempore autem distinctio qui iure aspernatur doloribus porro blanditiis perspiciatis alias.</p>
|
||||
</div>
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
|
||||
using Microsoft.AspNetCore.Components;
|
||||
using Microsoft.AspNetCore.Components;
|
||||
using TSC2.Components.CSharp;
|
||||
|
||||
namespace TSC2.Components.Pages
|
||||
{
|
||||
|
@ -7,10 +7,18 @@ namespace TSC2.Components.Pages
|
|||
{
|
||||
[Parameter]
|
||||
public string Shop { get; set; } = "DEFAULT_NAME";
|
||||
[Parameter] public string UniqueID { get; set; } = "-1";
|
||||
|
||||
public void DoAThing()
|
||||
protected override void OnInitialized() // Executes every page load; run inexpensive rendering code here
|
||||
{
|
||||
Console.WriteLine("This is a mimic of a sql query... DO NOT LOOK AT THIS PLEASE");
|
||||
//DatabaseManager
|
||||
}
|
||||
|
||||
|
||||
|
||||
private void LeaveReviewDebug()
|
||||
{
|
||||
DatabaseManager.AddReview(UniqueID);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -4,10 +4,11 @@ var builder = WebApplication.CreateBuilder(args);
|
|||
|
||||
// Add services to the container.
|
||||
builder.Services.AddRazorComponents(options => options.DetailedErrors = builder.Environment.IsDevelopment()).AddInteractiveServerComponents();
|
||||
|
||||
builder.Services.AddControllers();
|
||||
builder.Services.AddTelerikBlazor();
|
||||
|
||||
var app = builder.Build();
|
||||
app.MapControllers();
|
||||
|
||||
// Note secrets for login auth
|
||||
var GoogleClientId = builder.Configuration["Authentication:Google:ClientId"];
|
||||
|
|
Loading…
Reference in New Issue