using System; using System.Linq; using Luticate2.Auth.DataAccess.Models; using Luticate2.Auth.Dbo.Users; using Luticate2.Utils.DataAccess; using Luticate2.Utils.Dbo.Result; using Luticate2.Utils.Utils; using Microsoft.EntityFrameworkCore; using Newtonsoft.Json; using Npgsql; namespace Luticate2.Auth.DataAccess { public class LuUsersDataAccess : LuEfCrudDataAccess { public LuUsersDataAccess(IServiceProvider serviceProvider) : base(serviceProvider) { } protected override DbSet GetTable(LuAuthDatabaseContext db) { return db.lu_users; } protected override lu_users GetModelFromTCreate(LuUsersAddFullDbo obj) { return new lu_users { authentication_source_id = obj.AuthenticationSourceId.ToGuid(), data = JsonConvert.SerializeObject(obj.Data), password = obj.Password, salt = obj.Salt, username = obj.Username }; } protected override LuResult HandleError(Exception e) { if (e is DbUpdateException && e.InnerException is PostgresException) { var pge = (PostgresException) e.InnerException; if (pge.ConstraintName == "lu_users_authentication_source_id_username_key") { return LuResult.Error(LuStatus.InputError, e, "Username already exists"); } } return null; } protected override void EditModelFromTUpdate(LuUsersEditFullDbo obj, lu_users model) { throw new NotImplementedException();//TODO } protected override LuUsersFullDbo GetDboFromModel(lu_users model) { return model.ToDbo(); } public LuResult FindByUsername(string username) { return Execute((context, set) => { var user = set.FirstOrDefault(users => users.username.ToLower() == username.ToLower())?.ToDbo(); if (user != null) { return LuResult.Ok(user); } return LuResult.Error(LuStatus.NotFound, $"username: {username}", "Username not found"); }); } } }