From 9fe0396abeeb0702b9a75aee6e8c203fead8c010 Mon Sep 17 00:00:00 2001 From: "DESKTOP-GENO133\\IvanPlex" Date: Fri, 9 Feb 2024 09:55:02 -0700 Subject: [PATCH] added token data access for pg --- .../Litedb/UserConfigDataAccess.cs | 1 - .../Postgres/TokenRecordDataAccess.cs | 145 ++++++++++++++++++ .../Postgres/UserRecordDataAccess.cs | 2 - Program.cs | 4 +- 4 files changed, 148 insertions(+), 4 deletions(-) create mode 100644 External/Implementations/Postgres/TokenRecordDataAccess.cs diff --git a/External/Implementations/Litedb/UserConfigDataAccess.cs b/External/Implementations/Litedb/UserConfigDataAccess.cs index 7d63103..ec3d9d5 100644 --- a/External/Implementations/Litedb/UserConfigDataAccess.cs +++ b/External/Implementations/Litedb/UserConfigDataAccess.cs @@ -2,7 +2,6 @@ using CarCareTracker.Helper; using CarCareTracker.Models; using LiteDB; -using Microsoft.AspNetCore.Mvc.ModelBinding; namespace CarCareTracker.External.Implementations { diff --git a/External/Implementations/Postgres/TokenRecordDataAccess.cs b/External/Implementations/Postgres/TokenRecordDataAccess.cs new file mode 100644 index 0000000..8278d63 --- /dev/null +++ b/External/Implementations/Postgres/TokenRecordDataAccess.cs @@ -0,0 +1,145 @@ +using CarCareTracker.External.Interfaces; +using CarCareTracker.Models; +using Npgsql; +using System.Net.Mail; + +namespace CarCareTracker.External.Implementations +{ + public class PGTokenRecordDataAccess : ITokenRecordDataAccess + { + private NpgsqlConnection pgDataSource; + private readonly ILogger _logger; + private static string tableName = "tokenrecords"; + public PGTokenRecordDataAccess(IConfiguration config, ILogger logger) + { + pgDataSource = new NpgsqlConnection(config["POSTGRES_CONNECTION"]); + _logger = logger; + try + { + pgDataSource.Open(); + //create table if not exist. + string initCMD = $"CREATE TABLE IF NOT EXISTS app.{tableName} (id INT GENERATED ALWAYS AS IDENTITY primary key, body TEXT not null, emailaddress TEXT not null)"; + using (var ctext = new NpgsqlCommand(initCMD, pgDataSource)) + { + ctext.ExecuteNonQuery(); + } + } + catch (Exception ex) + { + _logger.LogError(ex.Message); + } + } + public List GetTokens() + { + try + { + string cmd = $"SELECT id, emailaddress, body FROM app.{tableName}"; + var results = new List(); + using (var ctext = new NpgsqlCommand(cmd, pgDataSource)) + { + using (NpgsqlDataReader reader = ctext.ExecuteReader()) + while (reader.Read()) + { + Token result = new Token(); + result.Id = int.Parse(reader["id"].ToString()); + result.EmailAddress = reader["emailaddress"].ToString(); + result.Body = reader["body"].ToString(); + results.Add(result); + } + } + return results; + } + catch (Exception ex) + { + _logger.LogError(ex.Message); + return new List(); + } + } + public Token GetTokenRecordByBody(string tokenBody) + { + try + { + string cmd = $"SELECT id, emailaddress, body FROM app.{tableName} WHERE body = @body"; + var result = new Token(); + using (var ctext = new NpgsqlCommand(cmd, pgDataSource)) + { + ctext.Parameters.AddWithValue("body", tokenBody); + using (NpgsqlDataReader reader = ctext.ExecuteReader()) + while (reader.Read()) + { + result.Id = int.Parse(reader["id"].ToString()); + result.EmailAddress = reader["emailaddress"].ToString(); + result.Body = reader["body"].ToString(); + } + } + return result; + } + catch (Exception ex) + { + _logger.LogError(ex.Message); + return new Token(); + } + } + public Token GetTokenRecordByEmailAddress(string emailAddress) + { + try + { + string cmd = $"SELECT id, emailaddress, body FROM app.{tableName} WHERE emailaddress = @emailaddress"; + var result = new Token(); + using (var ctext = new NpgsqlCommand(cmd, pgDataSource)) + { + ctext.Parameters.AddWithValue("emailaddress", emailAddress); + using (NpgsqlDataReader reader = ctext.ExecuteReader()) + while (reader.Read()) + { + result.Id = int.Parse(reader["id"].ToString()); + result.EmailAddress = reader["emailaddress"].ToString(); + result.Body = reader["body"].ToString(); + } + } + return result; + } + catch (Exception ex) + { + _logger.LogError(ex.Message); + return new Token(); + } + } + public bool CreateNewToken(Token token) + { + try + { + string cmd = $"INSERT INTO app.{tableName} (emailaddress, body) VALUES(@emailaddress, @body) RETURNING id"; + using (var ctext = new NpgsqlCommand(cmd, pgDataSource)) + { + ctext.Parameters.AddWithValue("emailaddress", token.EmailAddress); + ctext.Parameters.AddWithValue("body", token.Body); + token.Id = Convert.ToInt32(ctext.ExecuteScalar()); + return token.Id != default; + } + } + catch (Exception ex) + { + _logger.LogError(ex.Message); + return false; + } + } + public bool DeleteToken(int tokenId) + { + try + { + string cmd = $"DELETE FROM app.{tableName} WHERE id = @id"; + using (var ctext = new NpgsqlCommand(cmd, pgDataSource)) + { + ctext.Parameters.AddWithValue("id", tokenId); + return ctext.ExecuteNonQuery() > 0; + } + } + catch (Exception ex) + { + _logger.LogError(ex.Message); + return false; + } + } + } +} \ No newline at end of file diff --git a/External/Implementations/Postgres/UserRecordDataAccess.cs b/External/Implementations/Postgres/UserRecordDataAccess.cs index 219ca5c..13c5de7 100644 --- a/External/Implementations/Postgres/UserRecordDataAccess.cs +++ b/External/Implementations/Postgres/UserRecordDataAccess.cs @@ -1,8 +1,6 @@ using CarCareTracker.External.Interfaces; using CarCareTracker.Models; using Npgsql; -using System.Net.Mail; -using System.Text.Json; namespace CarCareTracker.External.Implementations { diff --git a/Program.cs b/Program.cs index a3bd906..09d9ab0 100644 --- a/Program.cs +++ b/Program.cs @@ -29,6 +29,7 @@ if (!string.IsNullOrWhiteSpace(builder.Configuration["POSTGRES_CONNECTION"])){ builder.Services.AddSingleton(); builder.Services.AddSingleton(); builder.Services.AddSingleton(); + builder.Services.AddSingleton(); } else { @@ -46,10 +47,11 @@ else builder.Services.AddSingleton(); builder.Services.AddSingleton(); builder.Services.AddSingleton(); + builder.Services.AddSingleton(); } -builder.Services.AddSingleton(); + builder.Services.AddSingleton(); //configure helpers