using System.ComponentModel.Design; using SurrealDb.Net; using SurrealDb.Net.Models; using SurrealDb.Net.Models.Auth; using System.Text.Json; using PasswordHasher; using var db = new SurrealDbClient("ws://127.0.0.1:8000/rpc"); await db.SignIn(new RootAuth { Username = "root", Password = "secret" }); await db.Use("test", "test"); var user = new Users { Username = "Keeper317", Email = "Keeper317@gmail.com", CreatedAt = DateTime.Now, UpdatedAt = DateTime.Now, LastLogin = DateTime.Now, TwoFactorEnabled = false, EmailVerified = false, AccountStatus = (int) AccountStatuses.Active, OnlineStatus = (int) OnlineStatuses.Online, }; var created = await db.Create("users", user); Console.WriteLine($"Created Person: {ToJsonString(created)}"); var hasher = new PasswordHasher.PasswordHasher(); user.Password = hasher.HashPassword(created.Id + "password"); user.UpdatedAt = DateTime.Now; user.LastLogin = DateTime.Now; user.Id = created.Id; bool isValid = hasher.VerifyPassword(created.Id + "password", user.Password); Console.WriteLine($"Password match: {isValid}"); var updated = await db.Merge("users", new() { Id = created.Id, Password = user.Password }); // var updated = await db.Merge( // new() { Id = (TABLE, "8b4nwczy6x8f8zd5sslq"), Marketing = true } // ); Console.WriteLine($"Updated Person: {ToJsonString(updated)}"); // var people = await db.Select("users"); Console.WriteLine($"Select Person: {ToJsonString(people)}"); // // var queryResponse = await db.Query($"SELECT Marketing, count() AS Count FROM type::table({TABLE}) GROUP BY Marketing"); // var groups = queryResponse.GetValue>(0); // Console.WriteLine($"Get Value as group: {ToJsonString(groups)}"); await db.Delete("users"); static string ToJsonString(object? o) { return JsonSerializer.Serialize(o, new JsonSerializerOptions { WriteIndented = true, }); } public class ResponsibilityMerge : Record { public bool Marketing { get; set; } } public class Group { public bool Marketing { get; set; } public int Count { get; set; } } public class Users : Record { public required string Username { get; set; } public string? Password { get; set; } public required string Email { get; set; } public required DateTime CreatedAt { get; set; } public required DateTime UpdatedAt { get; set; } public required DateTime LastLogin { get; set; } public bool TwoFactorEnabled { get; set; } public bool EmailVerified { get; set; } public required int AccountStatus { get; set; } public required int OnlineStatus { get; set; } } public class PasswordHash : Record { public string? Password { get; set; } } public class Sessions : Record { public required string UserId { get; set; } public required string TokenHash { get; set; } public required DateTime IssuedAt { get; set; } public required DateTime ExpiresAt { get; set; } public DateTime? LastUsedAt { get; set; } public bool Revoked { get; set; } public required string DeviceName { get; set; } public required string IpAddress { get; set; } public required string UserAgent { get; set; } } public class PasswordReset : Record { public required string UserId { get; set; } public required string TokenHash { get; set; } public required DateTime CreatedAt { get; set; } public required DateTime ExpiresAt { get; set; } public bool Revoked { get; set; } } public class Licenses : Record { public required string UserId { get; set; } public required int LicenseType { get; set; } public required int Status { get; set; } public required DateTime CreatedAt { get; set; } public required DateTime StartsAt { get; set; } public required DateTime UpdatedAt { get; set; } public required DateTime ExpiresAt { get; set; } } public class AuthAudits : Record { public required string UserId { get; set; } public required int EventType { get; set; } public bool Success { get; set; } public required string IpAddress { get; set; } public required string UserAgent { get; set; } public required string Details { get; set; } public required DateTime CreatedAt { get; set; } } enum AccountStatuses { Active, Suspended, Banned, Deleted } enum OnlineStatuses { Online, Busy, DND, Invisible, Offline } enum LicenseStatuses { Active, Expired, Renewable, Revoked } enum LicenseType { Free, Basic, Advanced, Pro, Enterprise } enum LogEvents { LoginSuccess, LoginFailure, LogoutSuccess, LogoutFailure, PasswordResetSuccess, PasswordResetFailure, }