♻️ Centralized data models (wip)
This commit is contained in:
@@ -1,6 +1,5 @@
|
|||||||
using System.Text.Json;
|
using System.Text.Json;
|
||||||
using DysonNetwork.Develop.Identity;
|
using DysonNetwork.Shared.Models;
|
||||||
using DysonNetwork.Develop.Project;
|
|
||||||
using Microsoft.EntityFrameworkCore;
|
using Microsoft.EntityFrameworkCore;
|
||||||
using Microsoft.EntityFrameworkCore.Design;
|
using Microsoft.EntityFrameworkCore.Design;
|
||||||
|
|
||||||
@@ -11,13 +10,13 @@ public class AppDatabase(
|
|||||||
IConfiguration configuration
|
IConfiguration configuration
|
||||||
) : DbContext(options)
|
) : DbContext(options)
|
||||||
{
|
{
|
||||||
public DbSet<Developer> Developers { get; set; } = null!;
|
public DbSet<SnDeveloper> Developers { get; set; } = null!;
|
||||||
|
|
||||||
public DbSet<DevProject> DevProjects { get; set; } = null!;
|
public DbSet<SnDevProject> DevProjects { get; set; } = null!;
|
||||||
|
|
||||||
public DbSet<CustomApp> CustomApps { get; set; } = null!;
|
public DbSet<SnCustomApp> CustomApps { get; set; } = null!;
|
||||||
public DbSet<CustomAppSecret> CustomAppSecrets { get; set; } = null!;
|
public DbSet<SnCustomAppSecret> CustomAppSecrets { get; set; } = null!;
|
||||||
public DbSet<BotAccount> BotAccounts { get; set; } = null!;
|
public DbSet<SnBotAccount> BotAccounts { get; set; } = null!;
|
||||||
|
|
||||||
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
|
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
|
||||||
{
|
{
|
||||||
|
@@ -1,6 +1,7 @@
|
|||||||
using System.ComponentModel.DataAnnotations;
|
using System.ComponentModel.DataAnnotations;
|
||||||
using DysonNetwork.Develop.Project;
|
using DysonNetwork.Develop.Project;
|
||||||
using DysonNetwork.Shared.Data;
|
using DysonNetwork.Shared.Data;
|
||||||
|
using DysonNetwork.Shared.Models;
|
||||||
using DysonNetwork.Shared.Proto;
|
using DysonNetwork.Shared.Proto;
|
||||||
using DysonNetwork.Shared.Registry;
|
using DysonNetwork.Shared.Registry;
|
||||||
using Grpc.Core;
|
using Grpc.Core;
|
||||||
@@ -436,7 +437,7 @@ public class BotAccountController(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private async Task<(Developer?, DevProject?, BotAccount?)> ValidateBotAccess(
|
private async Task<(SnDeveloper?, SnDevProject?, BotAccount?)> ValidateBotAccess(
|
||||||
string pubName,
|
string pubName,
|
||||||
Guid projectId,
|
Guid projectId,
|
||||||
Guid botId,
|
Guid botId,
|
||||||
|
@@ -1,3 +1,4 @@
|
|||||||
|
using DysonNetwork.Shared.Models;
|
||||||
using Microsoft.AspNetCore.Mvc;
|
using Microsoft.AspNetCore.Mvc;
|
||||||
|
|
||||||
namespace DysonNetwork.Develop.Identity;
|
namespace DysonNetwork.Develop.Identity;
|
||||||
@@ -7,7 +8,7 @@ namespace DysonNetwork.Develop.Identity;
|
|||||||
public class BotAccountPublicController(BotAccountService botService, DeveloperService developerService) : ControllerBase
|
public class BotAccountPublicController(BotAccountService botService, DeveloperService developerService) : ControllerBase
|
||||||
{
|
{
|
||||||
[HttpGet("{botId:guid}")]
|
[HttpGet("{botId:guid}")]
|
||||||
public async Task<ActionResult<BotAccount>> GetBotTransparentInfo([FromRoute] Guid botId)
|
public async Task<ActionResult<SnBotAccount>> GetBotTransparentInfo([FromRoute] Guid botId)
|
||||||
{
|
{
|
||||||
var bot = await botService.GetBotByIdAsync(botId);
|
var bot = await botService.GetBotByIdAsync(botId);
|
||||||
if (bot is null) return NotFound("Bot not found");
|
if (bot is null) return NotFound("Bot not found");
|
||||||
@@ -21,7 +22,7 @@ public class BotAccountPublicController(BotAccountService botService, DeveloperS
|
|||||||
}
|
}
|
||||||
|
|
||||||
[HttpGet("{botId:guid}/developer")]
|
[HttpGet("{botId:guid}/developer")]
|
||||||
public async Task<ActionResult<Developer>> GetBotDeveloper([FromRoute] Guid botId)
|
public async Task<ActionResult<SnDeveloper>> GetBotDeveloper([FromRoute] Guid botId)
|
||||||
{
|
{
|
||||||
var bot = await botService.GetBotByIdAsync(botId);
|
var bot = await botService.GetBotByIdAsync(botId);
|
||||||
if (bot is null) return NotFound("Bot not found");
|
if (bot is null) return NotFound("Bot not found");
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
using DysonNetwork.Develop.Project;
|
|
||||||
using DysonNetwork.Shared.Data;
|
using DysonNetwork.Shared.Data;
|
||||||
|
using DysonNetwork.Shared.Models;
|
||||||
using DysonNetwork.Shared.Proto;
|
using DysonNetwork.Shared.Proto;
|
||||||
using DysonNetwork.Shared.Registry;
|
using DysonNetwork.Shared.Registry;
|
||||||
using Grpc.Core;
|
using Grpc.Core;
|
||||||
@@ -29,7 +29,7 @@ public class BotAccountService(
|
|||||||
}
|
}
|
||||||
|
|
||||||
public async Task<BotAccount> CreateBotAsync(
|
public async Task<BotAccount> CreateBotAsync(
|
||||||
DevProject project,
|
SnDevProject project,
|
||||||
string slug,
|
string slug,
|
||||||
Account account,
|
Account account,
|
||||||
string? pictureId,
|
string? pictureId,
|
||||||
@@ -165,7 +165,7 @@ public class BotAccountService(
|
|||||||
foreach (var bot in bots)
|
foreach (var bot in bots)
|
||||||
{
|
{
|
||||||
bot.Account = data
|
bot.Account = data
|
||||||
.Select(AccountReference.FromProtoValue)
|
.Select(SnAccount.FromProtoValue)
|
||||||
.FirstOrDefault(e => e.AutomatedId == bot.Id);
|
.FirstOrDefault(e => e.AutomatedId == bot.Id);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -1,5 +1,6 @@
|
|||||||
using System.ComponentModel.DataAnnotations;
|
using System.ComponentModel.DataAnnotations;
|
||||||
using DysonNetwork.Develop.Project;
|
using DysonNetwork.Develop.Project;
|
||||||
|
using DysonNetwork.Shared.Models;
|
||||||
using DysonNetwork.Shared.Proto;
|
using DysonNetwork.Shared.Proto;
|
||||||
using Microsoft.AspNetCore.Authorization;
|
using Microsoft.AspNetCore.Authorization;
|
||||||
using Microsoft.AspNetCore.Mvc;
|
using Microsoft.AspNetCore.Mvc;
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
using DysonNetwork.Develop.Project;
|
using DysonNetwork.Develop.Project;
|
||||||
using DysonNetwork.Shared.Data;
|
using DysonNetwork.Shared.Models;
|
||||||
using DysonNetwork.Shared.Proto;
|
using DysonNetwork.Shared.Proto;
|
||||||
using Microsoft.EntityFrameworkCore;
|
using Microsoft.EntityFrameworkCore;
|
||||||
using System.Security.Cryptography;
|
using System.Security.Cryptography;
|
||||||
@@ -46,7 +46,7 @@ public class CustomAppService(
|
|||||||
);
|
);
|
||||||
if (picture is null)
|
if (picture is null)
|
||||||
throw new InvalidOperationException("Invalid picture id, unable to find the file on cloud.");
|
throw new InvalidOperationException("Invalid picture id, unable to find the file on cloud.");
|
||||||
app.Picture = CloudFileReferenceObject.FromProtoValue(picture);
|
app.Picture = SnCloudFileReferenceObject.FromProtoValue(picture);
|
||||||
|
|
||||||
// Create a new reference
|
// Create a new reference
|
||||||
await fileRefs.CreateReferenceAsync(
|
await fileRefs.CreateReferenceAsync(
|
||||||
@@ -65,7 +65,7 @@ public class CustomAppService(
|
|||||||
);
|
);
|
||||||
if (background is null)
|
if (background is null)
|
||||||
throw new InvalidOperationException("Invalid picture id, unable to find the file on cloud.");
|
throw new InvalidOperationException("Invalid picture id, unable to find the file on cloud.");
|
||||||
app.Background = CloudFileReferenceObject.FromProtoValue(background);
|
app.Background = SnCloudFileReferenceObject.FromProtoValue(background);
|
||||||
|
|
||||||
// Create a new reference
|
// Create a new reference
|
||||||
await fileRefs.CreateReferenceAsync(
|
await fileRefs.CreateReferenceAsync(
|
||||||
@@ -209,7 +209,7 @@ public class CustomAppService(
|
|||||||
);
|
);
|
||||||
if (picture is null)
|
if (picture is null)
|
||||||
throw new InvalidOperationException("Invalid picture id, unable to find the file on cloud.");
|
throw new InvalidOperationException("Invalid picture id, unable to find the file on cloud.");
|
||||||
app.Picture = CloudFileReferenceObject.FromProtoValue(picture);
|
app.Picture = SnCloudFileReferenceObject.FromProtoValue(picture);
|
||||||
|
|
||||||
// Create a new reference
|
// Create a new reference
|
||||||
await fileRefs.CreateReferenceAsync(
|
await fileRefs.CreateReferenceAsync(
|
||||||
@@ -228,7 +228,7 @@ public class CustomAppService(
|
|||||||
);
|
);
|
||||||
if (background is null)
|
if (background is null)
|
||||||
throw new InvalidOperationException("Invalid picture id, unable to find the file on cloud.");
|
throw new InvalidOperationException("Invalid picture id, unable to find the file on cloud.");
|
||||||
app.Background = CloudFileReferenceObject.FromProtoValue(background);
|
app.Background = SnCloudFileReferenceObject.FromProtoValue(background);
|
||||||
|
|
||||||
// Create a new reference
|
// Create a new reference
|
||||||
await fileRefs.CreateReferenceAsync(
|
await fileRefs.CreateReferenceAsync(
|
||||||
|
@@ -1,3 +1,4 @@
|
|||||||
|
using DysonNetwork.Shared.Models;
|
||||||
using DysonNetwork.Shared.Proto;
|
using DysonNetwork.Shared.Proto;
|
||||||
using Grpc.Core;
|
using Grpc.Core;
|
||||||
using Microsoft.EntityFrameworkCore;
|
using Microsoft.EntityFrameworkCore;
|
||||||
|
@@ -1,79 +0,0 @@
|
|||||||
using System.ComponentModel.DataAnnotations.Schema;
|
|
||||||
using System.Text.Json.Serialization;
|
|
||||||
using DysonNetwork.Develop.Project;
|
|
||||||
using DysonNetwork.Shared.Proto;
|
|
||||||
using DysonNetwork.Shared.Data;
|
|
||||||
using VerificationMark = DysonNetwork.Shared.Data.VerificationMark;
|
|
||||||
|
|
||||||
namespace DysonNetwork.Develop.Identity;
|
|
||||||
|
|
||||||
public class Developer
|
|
||||||
{
|
|
||||||
public Guid Id { get; set; } = Guid.NewGuid();
|
|
||||||
public Guid PublisherId { get; set; }
|
|
||||||
|
|
||||||
[JsonIgnore] public List<DevProject> Projects { get; set; } = [];
|
|
||||||
|
|
||||||
[NotMapped] public PublisherInfo? Publisher { get; set; }
|
|
||||||
}
|
|
||||||
|
|
||||||
public class PublisherInfo
|
|
||||||
{
|
|
||||||
public Guid Id { get; set; }
|
|
||||||
public PublisherType Type { get; set; }
|
|
||||||
public string Name { get; set; } = string.Empty;
|
|
||||||
public string Nick { get; set; } = string.Empty;
|
|
||||||
public string? Bio { get; set; }
|
|
||||||
|
|
||||||
public CloudFileReferenceObject? Picture { get; set; }
|
|
||||||
public CloudFileReferenceObject? Background { get; set; }
|
|
||||||
|
|
||||||
public VerificationMark? Verification { get; set; }
|
|
||||||
public Guid? AccountId { get; set; }
|
|
||||||
public Guid? RealmId { get; set; }
|
|
||||||
|
|
||||||
public static PublisherInfo FromProto(Publisher proto)
|
|
||||||
{
|
|
||||||
var info = new PublisherInfo
|
|
||||||
{
|
|
||||||
Id = Guid.Parse(proto.Id),
|
|
||||||
Type = proto.Type == PublisherType.PubIndividual
|
|
||||||
? PublisherType.PubIndividual
|
|
||||||
: PublisherType.PubOrganizational,
|
|
||||||
Name = proto.Name,
|
|
||||||
Nick = proto.Nick,
|
|
||||||
Bio = string.IsNullOrEmpty(proto.Bio) ? null : proto.Bio,
|
|
||||||
Verification = proto.VerificationMark is not null
|
|
||||||
? VerificationMark.FromProtoValue(proto.VerificationMark)
|
|
||||||
: null,
|
|
||||||
AccountId = string.IsNullOrEmpty(proto.AccountId) ? null : Guid.Parse(proto.AccountId),
|
|
||||||
RealmId = string.IsNullOrEmpty(proto.RealmId) ? null : Guid.Parse(proto.RealmId)
|
|
||||||
};
|
|
||||||
|
|
||||||
if (proto.Picture != null)
|
|
||||||
{
|
|
||||||
info.Picture = new CloudFileReferenceObject
|
|
||||||
{
|
|
||||||
Id = proto.Picture.Id,
|
|
||||||
Name = proto.Picture.Name,
|
|
||||||
MimeType = proto.Picture.MimeType,
|
|
||||||
Hash = proto.Picture.Hash,
|
|
||||||
Size = proto.Picture.Size
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
if (proto.Background != null)
|
|
||||||
{
|
|
||||||
info.Background = new CloudFileReferenceObject
|
|
||||||
{
|
|
||||||
Id = proto.Background.Id,
|
|
||||||
Name = proto.Background.Name,
|
|
||||||
MimeType = proto.Background.MimeType,
|
|
||||||
Hash = proto.Background.Hash,
|
|
||||||
Size = (long)proto.Background.Size
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
return info;
|
|
||||||
}
|
|
||||||
}
|
|
@@ -1,4 +1,5 @@
|
|||||||
using DysonNetwork.Shared.Auth;
|
using DysonNetwork.Shared.Auth;
|
||||||
|
using DysonNetwork.Shared.Models;
|
||||||
using DysonNetwork.Shared.Proto;
|
using DysonNetwork.Shared.Proto;
|
||||||
using Grpc.Core;
|
using Grpc.Core;
|
||||||
using Microsoft.AspNetCore.Authorization;
|
using Microsoft.AspNetCore.Authorization;
|
||||||
@@ -18,7 +19,7 @@ public class DeveloperController(
|
|||||||
: ControllerBase
|
: ControllerBase
|
||||||
{
|
{
|
||||||
[HttpGet("{name}")]
|
[HttpGet("{name}")]
|
||||||
public async Task<ActionResult<Developer>> GetDeveloper(string name)
|
public async Task<ActionResult<SnDeveloper>> GetDeveloper(string name)
|
||||||
{
|
{
|
||||||
var developer = await ds.GetDeveloperByName(name);
|
var developer = await ds.GetDeveloperByName(name);
|
||||||
if (developer is null) return NotFound();
|
if (developer is null) return NotFound();
|
||||||
@@ -47,7 +48,7 @@ public class DeveloperController(
|
|||||||
|
|
||||||
[HttpGet]
|
[HttpGet]
|
||||||
[Authorize]
|
[Authorize]
|
||||||
public async Task<ActionResult<List<Developer>>> ListJoinedDevelopers()
|
public async Task<ActionResult<List<SnDeveloper>>> ListJoinedDevelopers()
|
||||||
{
|
{
|
||||||
if (HttpContext.Items["CurrentUser"] is not Account currentUser) return Unauthorized();
|
if (HttpContext.Items["CurrentUser"] is not Account currentUser) return Unauthorized();
|
||||||
|
|
||||||
@@ -69,7 +70,7 @@ public class DeveloperController(
|
|||||||
[HttpPost("{name}/enroll")]
|
[HttpPost("{name}/enroll")]
|
||||||
[Authorize]
|
[Authorize]
|
||||||
[RequiredPermission("global", "developers.create")]
|
[RequiredPermission("global", "developers.create")]
|
||||||
public async Task<ActionResult<Developer>> EnrollDeveloperProgram(string name)
|
public async Task<ActionResult<SnDeveloper>> EnrollDeveloperProgram(string name)
|
||||||
{
|
{
|
||||||
if (HttpContext.Items["CurrentUser"] is not Account currentUser) return Unauthorized();
|
if (HttpContext.Items["CurrentUser"] is not Account currentUser) return Unauthorized();
|
||||||
var accountId = Guid.Parse(currentUser.Id);
|
var accountId = Guid.Parse(currentUser.Id);
|
||||||
@@ -96,7 +97,7 @@ public class DeveloperController(
|
|||||||
var hasDeveloper = await db.Developers.AnyAsync(d => d.PublisherId == pub.Id);
|
var hasDeveloper = await db.Developers.AnyAsync(d => d.PublisherId == pub.Id);
|
||||||
if (hasDeveloper) return BadRequest("Publisher is already in the developer program");
|
if (hasDeveloper) return BadRequest("Publisher is already in the developer program");
|
||||||
|
|
||||||
var developer = new Developer
|
var developer = new SnDeveloper
|
||||||
{
|
{
|
||||||
Id = Guid.NewGuid(),
|
Id = Guid.NewGuid(),
|
||||||
PublisherId = pub.Id
|
PublisherId = pub.Id
|
||||||
|
@@ -1,3 +1,4 @@
|
|||||||
|
using DysonNetwork.Shared.Models;
|
||||||
using DysonNetwork.Shared.Proto;
|
using DysonNetwork.Shared.Proto;
|
||||||
using Grpc.Core;
|
using Grpc.Core;
|
||||||
using Microsoft.EntityFrameworkCore;
|
using Microsoft.EntityFrameworkCore;
|
||||||
@@ -9,7 +10,7 @@ public class DeveloperService(
|
|||||||
PublisherService.PublisherServiceClient ps,
|
PublisherService.PublisherServiceClient ps,
|
||||||
ILogger<DeveloperService> logger)
|
ILogger<DeveloperService> logger)
|
||||||
{
|
{
|
||||||
public async Task<Developer> LoadDeveloperPublisher(Developer developer)
|
public async Task<SnDeveloper> LoadDeveloperPublisher(SnDeveloper developer)
|
||||||
{
|
{
|
||||||
var pubResponse = await ps.GetPublisherAsync(new GetPublisherRequest { Id = developer.PublisherId.ToString() });
|
var pubResponse = await ps.GetPublisherAsync(new GetPublisherRequest { Id = developer.PublisherId.ToString() });
|
||||||
developer.Publisher = PublisherInfo.FromProto(pubResponse.Publisher);
|
developer.Publisher = PublisherInfo.FromProto(pubResponse.Publisher);
|
||||||
@@ -17,7 +18,7 @@ public class DeveloperService(
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public async Task<IEnumerable<Developer>> LoadDeveloperPublisher(IEnumerable<Developer> developers)
|
public async Task<IEnumerable<SnDeveloper>> LoadDeveloperPublisher(IEnumerable<SnDeveloper> developers)
|
||||||
{
|
{
|
||||||
var enumerable = developers.ToList();
|
var enumerable = developers.ToList();
|
||||||
var pubIds = enumerable.Select(d => d.PublisherId).ToList();
|
var pubIds = enumerable.Select(d => d.PublisherId).ToList();
|
||||||
@@ -33,7 +34,7 @@ public class DeveloperService(
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task<Developer?> GetDeveloperByName(string name)
|
public async Task<SnDeveloper?> GetDeveloperByName(string name)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
@@ -50,7 +51,7 @@ public class DeveloperService(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task<Developer?> GetDeveloperById(Guid id)
|
public async Task<SnDeveloper?> GetDeveloperById(Guid id)
|
||||||
{
|
{
|
||||||
return await db.Developers.FirstOrDefaultAsync(d => d.Id == id);
|
return await db.Developers.FirstOrDefaultAsync(d => d.Id == id);
|
||||||
}
|
}
|
||||||
|
@@ -1,8 +1,7 @@
|
|||||||
// <auto-generated />
|
// <auto-generated />
|
||||||
using System;
|
using System;
|
||||||
using DysonNetwork.Develop;
|
using DysonNetwork.Develop;
|
||||||
using DysonNetwork.Develop.Identity;
|
using DysonNetwork.Shared.Models;
|
||||||
using DysonNetwork.Shared.Data;
|
|
||||||
using Microsoft.EntityFrameworkCore;
|
using Microsoft.EntityFrameworkCore;
|
||||||
using Microsoft.EntityFrameworkCore.Infrastructure;
|
using Microsoft.EntityFrameworkCore.Infrastructure;
|
||||||
using Microsoft.EntityFrameworkCore.Migrations;
|
using Microsoft.EntityFrameworkCore.Migrations;
|
||||||
@@ -35,7 +34,7 @@ namespace DysonNetwork.Develop.Migrations
|
|||||||
.HasColumnType("uuid")
|
.HasColumnType("uuid")
|
||||||
.HasColumnName("id");
|
.HasColumnName("id");
|
||||||
|
|
||||||
b.Property<CloudFileReferenceObject>("Background")
|
b.Property<SnCloudFileReferenceObject>("Background")
|
||||||
.HasColumnType("jsonb")
|
.HasColumnType("jsonb")
|
||||||
.HasColumnName("background");
|
.HasColumnName("background");
|
||||||
|
|
||||||
@@ -70,7 +69,7 @@ namespace DysonNetwork.Develop.Migrations
|
|||||||
.HasColumnType("jsonb")
|
.HasColumnType("jsonb")
|
||||||
.HasColumnName("oauth_config");
|
.HasColumnName("oauth_config");
|
||||||
|
|
||||||
b.Property<CloudFileReferenceObject>("Picture")
|
b.Property<SnCloudFileReferenceObject>("Picture")
|
||||||
.HasColumnType("jsonb")
|
.HasColumnType("jsonb")
|
||||||
.HasColumnName("picture");
|
.HasColumnName("picture");
|
||||||
|
|
||||||
@@ -88,7 +87,7 @@ namespace DysonNetwork.Develop.Migrations
|
|||||||
.HasColumnType("timestamp with time zone")
|
.HasColumnType("timestamp with time zone")
|
||||||
.HasColumnName("updated_at");
|
.HasColumnName("updated_at");
|
||||||
|
|
||||||
b.Property<VerificationMark>("Verification")
|
b.Property<SnVerificationMark>("Verification")
|
||||||
.HasColumnType("jsonb")
|
.HasColumnType("jsonb")
|
||||||
.HasColumnName("verification");
|
.HasColumnName("verification");
|
||||||
|
|
||||||
|
@@ -1,6 +1,5 @@
|
|||||||
using System;
|
using System;
|
||||||
using DysonNetwork.Develop.Identity;
|
using DysonNetwork.Shared.Models;
|
||||||
using DysonNetwork.Shared.Data;
|
|
||||||
using Microsoft.EntityFrameworkCore.Migrations;
|
using Microsoft.EntityFrameworkCore.Migrations;
|
||||||
using NodaTime;
|
using NodaTime;
|
||||||
|
|
||||||
@@ -35,9 +34,9 @@ namespace DysonNetwork.Develop.Migrations
|
|||||||
name = table.Column<string>(type: "character varying(1024)", maxLength: 1024, nullable: false),
|
name = table.Column<string>(type: "character varying(1024)", maxLength: 1024, nullable: false),
|
||||||
description = table.Column<string>(type: "character varying(4096)", maxLength: 4096, nullable: true),
|
description = table.Column<string>(type: "character varying(4096)", maxLength: 4096, nullable: true),
|
||||||
status = table.Column<int>(type: "integer", nullable: false),
|
status = table.Column<int>(type: "integer", nullable: false),
|
||||||
picture = table.Column<CloudFileReferenceObject>(type: "jsonb", nullable: true),
|
picture = table.Column<SnCloudFileReferenceObject>(type: "jsonb", nullable: true),
|
||||||
background = table.Column<CloudFileReferenceObject>(type: "jsonb", nullable: true),
|
background = table.Column<SnCloudFileReferenceObject>(type: "jsonb", nullable: true),
|
||||||
verification = table.Column<VerificationMark>(type: "jsonb", nullable: true),
|
verification = table.Column<SnVerificationMark>(type: "jsonb", nullable: true),
|
||||||
oauth_config = table.Column<CustomAppOauthConfig>(type: "jsonb", nullable: true),
|
oauth_config = table.Column<CustomAppOauthConfig>(type: "jsonb", nullable: true),
|
||||||
links = table.Column<CustomAppLinks>(type: "jsonb", nullable: true),
|
links = table.Column<CustomAppLinks>(type: "jsonb", nullable: true),
|
||||||
developer_id = table.Column<Guid>(type: "uuid", nullable: false),
|
developer_id = table.Column<Guid>(type: "uuid", nullable: false),
|
||||||
|
@@ -1,8 +1,7 @@
|
|||||||
// <auto-generated />
|
// <auto-generated />
|
||||||
using System;
|
using System;
|
||||||
using DysonNetwork.Develop;
|
using DysonNetwork.Develop;
|
||||||
using DysonNetwork.Develop.Identity;
|
using DysonNetwork.Shared.Models;
|
||||||
using DysonNetwork.Shared.Data;
|
|
||||||
using Microsoft.EntityFrameworkCore;
|
using Microsoft.EntityFrameworkCore;
|
||||||
using Microsoft.EntityFrameworkCore.Infrastructure;
|
using Microsoft.EntityFrameworkCore.Infrastructure;
|
||||||
using Microsoft.EntityFrameworkCore.Migrations;
|
using Microsoft.EntityFrameworkCore.Migrations;
|
||||||
@@ -35,7 +34,7 @@ namespace DysonNetwork.Develop.Migrations
|
|||||||
.HasColumnType("uuid")
|
.HasColumnType("uuid")
|
||||||
.HasColumnName("id");
|
.HasColumnName("id");
|
||||||
|
|
||||||
b.Property<CloudFileReferenceObject>("Background")
|
b.Property<SnCloudFileReferenceObject>("Background")
|
||||||
.HasColumnType("jsonb")
|
.HasColumnType("jsonb")
|
||||||
.HasColumnName("background");
|
.HasColumnName("background");
|
||||||
|
|
||||||
@@ -66,7 +65,7 @@ namespace DysonNetwork.Develop.Migrations
|
|||||||
.HasColumnType("jsonb")
|
.HasColumnType("jsonb")
|
||||||
.HasColumnName("oauth_config");
|
.HasColumnName("oauth_config");
|
||||||
|
|
||||||
b.Property<CloudFileReferenceObject>("Picture")
|
b.Property<SnCloudFileReferenceObject>("Picture")
|
||||||
.HasColumnType("jsonb")
|
.HasColumnType("jsonb")
|
||||||
.HasColumnName("picture");
|
.HasColumnName("picture");
|
||||||
|
|
||||||
@@ -88,7 +87,7 @@ namespace DysonNetwork.Develop.Migrations
|
|||||||
.HasColumnType("timestamp with time zone")
|
.HasColumnType("timestamp with time zone")
|
||||||
.HasColumnName("updated_at");
|
.HasColumnName("updated_at");
|
||||||
|
|
||||||
b.Property<VerificationMark>("Verification")
|
b.Property<SnVerificationMark>("Verification")
|
||||||
.HasColumnType("jsonb")
|
.HasColumnType("jsonb")
|
||||||
.HasColumnName("verification");
|
.HasColumnName("verification");
|
||||||
|
|
||||||
|
@@ -1,8 +1,7 @@
|
|||||||
// <auto-generated />
|
// <auto-generated />
|
||||||
using System;
|
using System;
|
||||||
using DysonNetwork.Develop;
|
using DysonNetwork.Develop;
|
||||||
using DysonNetwork.Develop.Identity;
|
using DysonNetwork.Shared.Models;
|
||||||
using DysonNetwork.Shared.Data;
|
|
||||||
using Microsoft.EntityFrameworkCore;
|
using Microsoft.EntityFrameworkCore;
|
||||||
using Microsoft.EntityFrameworkCore.Infrastructure;
|
using Microsoft.EntityFrameworkCore.Infrastructure;
|
||||||
using Microsoft.EntityFrameworkCore.Migrations;
|
using Microsoft.EntityFrameworkCore.Migrations;
|
||||||
@@ -77,7 +76,7 @@ namespace DysonNetwork.Develop.Migrations
|
|||||||
.HasColumnType("uuid")
|
.HasColumnType("uuid")
|
||||||
.HasColumnName("id");
|
.HasColumnName("id");
|
||||||
|
|
||||||
b.Property<CloudFileReferenceObject>("Background")
|
b.Property<SnCloudFileReferenceObject>("Background")
|
||||||
.HasColumnType("jsonb")
|
.HasColumnType("jsonb")
|
||||||
.HasColumnName("background");
|
.HasColumnName("background");
|
||||||
|
|
||||||
@@ -108,7 +107,7 @@ namespace DysonNetwork.Develop.Migrations
|
|||||||
.HasColumnType("jsonb")
|
.HasColumnType("jsonb")
|
||||||
.HasColumnName("oauth_config");
|
.HasColumnName("oauth_config");
|
||||||
|
|
||||||
b.Property<CloudFileReferenceObject>("Picture")
|
b.Property<SnCloudFileReferenceObject>("Picture")
|
||||||
.HasColumnType("jsonb")
|
.HasColumnType("jsonb")
|
||||||
.HasColumnName("picture");
|
.HasColumnName("picture");
|
||||||
|
|
||||||
@@ -130,7 +129,7 @@ namespace DysonNetwork.Develop.Migrations
|
|||||||
.HasColumnType("timestamp with time zone")
|
.HasColumnType("timestamp with time zone")
|
||||||
.HasColumnName("updated_at");
|
.HasColumnName("updated_at");
|
||||||
|
|
||||||
b.Property<VerificationMark>("Verification")
|
b.Property<SnVerificationMark>("Verification")
|
||||||
.HasColumnType("jsonb")
|
.HasColumnType("jsonb")
|
||||||
.HasColumnName("verification");
|
.HasColumnName("verification");
|
||||||
|
|
||||||
|
@@ -1,8 +1,7 @@
|
|||||||
// <auto-generated />
|
// <auto-generated />
|
||||||
using System;
|
using System;
|
||||||
using DysonNetwork.Develop;
|
using DysonNetwork.Develop;
|
||||||
using DysonNetwork.Develop.Identity;
|
using DysonNetwork.Shared.Models;
|
||||||
using DysonNetwork.Shared.Data;
|
|
||||||
using Microsoft.EntityFrameworkCore;
|
using Microsoft.EntityFrameworkCore;
|
||||||
using Microsoft.EntityFrameworkCore.Infrastructure;
|
using Microsoft.EntityFrameworkCore.Infrastructure;
|
||||||
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
|
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
|
||||||
@@ -74,7 +73,7 @@ namespace DysonNetwork.Develop.Migrations
|
|||||||
.HasColumnType("uuid")
|
.HasColumnType("uuid")
|
||||||
.HasColumnName("id");
|
.HasColumnName("id");
|
||||||
|
|
||||||
b.Property<CloudFileReferenceObject>("Background")
|
b.Property<SnCloudFileReferenceObject>("Background")
|
||||||
.HasColumnType("jsonb")
|
.HasColumnType("jsonb")
|
||||||
.HasColumnName("background");
|
.HasColumnName("background");
|
||||||
|
|
||||||
@@ -105,7 +104,7 @@ namespace DysonNetwork.Develop.Migrations
|
|||||||
.HasColumnType("jsonb")
|
.HasColumnType("jsonb")
|
||||||
.HasColumnName("oauth_config");
|
.HasColumnName("oauth_config");
|
||||||
|
|
||||||
b.Property<CloudFileReferenceObject>("Picture")
|
b.Property<SnCloudFileReferenceObject>("Picture")
|
||||||
.HasColumnType("jsonb")
|
.HasColumnType("jsonb")
|
||||||
.HasColumnName("picture");
|
.HasColumnName("picture");
|
||||||
|
|
||||||
@@ -127,7 +126,7 @@ namespace DysonNetwork.Develop.Migrations
|
|||||||
.HasColumnType("timestamp with time zone")
|
.HasColumnType("timestamp with time zone")
|
||||||
.HasColumnName("updated_at");
|
.HasColumnName("updated_at");
|
||||||
|
|
||||||
b.Property<VerificationMark>("Verification")
|
b.Property<SnVerificationMark>("Verification")
|
||||||
.HasColumnType("jsonb")
|
.HasColumnType("jsonb")
|
||||||
.HasColumnName("verification");
|
.HasColumnName("verification");
|
||||||
|
|
||||||
|
@@ -1,6 +1,6 @@
|
|||||||
using DysonNetwork.Develop.Identity;
|
|
||||||
using Microsoft.EntityFrameworkCore;
|
using Microsoft.EntityFrameworkCore;
|
||||||
using DysonNetwork.Shared.Proto;
|
using DysonNetwork.Shared.Proto;
|
||||||
|
using DysonNetwork.Shared.Models;
|
||||||
|
|
||||||
namespace DysonNetwork.Develop.Project;
|
namespace DysonNetwork.Develop.Project;
|
||||||
|
|
||||||
@@ -10,12 +10,12 @@ public class DevProjectService(
|
|||||||
FileService.FileServiceClient files
|
FileService.FileServiceClient files
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
public async Task<DevProject> CreateProjectAsync(
|
public async Task<SnDevProject> CreateProjectAsync(
|
||||||
Developer developer,
|
SnDeveloper developer,
|
||||||
DevProjectController.DevProjectRequest request
|
DevProjectController.DevProjectRequest request
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
var project = new DevProject
|
var project = new SnDevProject
|
||||||
{
|
{
|
||||||
Slug = request.Slug!,
|
Slug = request.Slug!,
|
||||||
Name = request.Name!,
|
Name = request.Name!,
|
||||||
@@ -29,7 +29,7 @@ public class DevProjectService(
|
|||||||
return project;
|
return project;
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task<DevProject?> GetProjectAsync(Guid id, Guid? developerId = null)
|
public async Task<SnDevProject?> GetProjectAsync(Guid id, Guid? developerId = null)
|
||||||
{
|
{
|
||||||
var query = db.DevProjects.AsQueryable();
|
var query = db.DevProjects.AsQueryable();
|
||||||
|
|
||||||
@@ -41,14 +41,14 @@ public class DevProjectService(
|
|||||||
return await query.FirstOrDefaultAsync(p => p.Id == id);
|
return await query.FirstOrDefaultAsync(p => p.Id == id);
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task<List<DevProject>> GetProjectsByDeveloperAsync(Guid developerId)
|
public async Task<List<SnDevProject>> GetProjectsByDeveloperAsync(Guid developerId)
|
||||||
{
|
{
|
||||||
return await db.DevProjects
|
return await db.DevProjects
|
||||||
.Where(p => p.DeveloperId == developerId)
|
.Where(p => p.DeveloperId == developerId)
|
||||||
.ToListAsync();
|
.ToListAsync();
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task<DevProject?> UpdateProjectAsync(
|
public async Task<SnDevProject?> UpdateProjectAsync(
|
||||||
Guid id,
|
Guid id,
|
||||||
Guid developerId,
|
Guid developerId,
|
||||||
DevProjectController.DevProjectRequest request
|
DevProjectController.DevProjectRequest request
|
||||||
|
@@ -1,8 +1,8 @@
|
|||||||
using System.Linq.Expressions;
|
using System.Linq.Expressions;
|
||||||
using System.Reflection;
|
using System.Reflection;
|
||||||
using DysonNetwork.Drive.Billing;
|
using DysonNetwork.Drive.Billing;
|
||||||
using DysonNetwork.Drive.Storage;
|
|
||||||
using DysonNetwork.Shared.Data;
|
using DysonNetwork.Shared.Data;
|
||||||
|
using DysonNetwork.Shared.Models;
|
||||||
using Microsoft.EntityFrameworkCore;
|
using Microsoft.EntityFrameworkCore;
|
||||||
using Microsoft.EntityFrameworkCore.Design;
|
using Microsoft.EntityFrameworkCore.Design;
|
||||||
using Microsoft.EntityFrameworkCore.Query;
|
using Microsoft.EntityFrameworkCore.Query;
|
||||||
@@ -17,11 +17,11 @@ public class AppDatabase(
|
|||||||
) : DbContext(options)
|
) : DbContext(options)
|
||||||
{
|
{
|
||||||
public DbSet<FilePool> Pools { get; set; } = null!;
|
public DbSet<FilePool> Pools { get; set; } = null!;
|
||||||
public DbSet<FileBundle> Bundles { get; set; } = null!;
|
public DbSet<SnFileBundle> Bundles { get; set; } = null!;
|
||||||
|
|
||||||
public DbSet<QuotaRecord> QuotaRecords { get; set; } = null!;
|
public DbSet<QuotaRecord> QuotaRecords { get; set; } = null!;
|
||||||
|
|
||||||
public DbSet<CloudFile> Files { get; set; } = null!;
|
public DbSet<SnCloudFile> Files { get; set; } = null!;
|
||||||
public DbSet<CloudFileReference> FileReferences { get; set; } = null!;
|
public DbSet<CloudFileReference> FileReferences { get; set; } = null!;
|
||||||
|
|
||||||
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
|
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
|
||||||
|
@@ -1,4 +1,5 @@
|
|||||||
using DysonNetwork.Shared.Data;
|
using DysonNetwork.Shared.Data;
|
||||||
|
using DysonNetwork.Shared.Models;
|
||||||
using NodaTime;
|
using NodaTime;
|
||||||
|
|
||||||
namespace DysonNetwork.Drive.Billing;
|
namespace DysonNetwork.Drive.Billing;
|
||||||
|
@@ -3,7 +3,7 @@ using System;
|
|||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using DysonNetwork.Drive;
|
using DysonNetwork.Drive;
|
||||||
using DysonNetwork.Drive.Storage;
|
using DysonNetwork.Drive.Storage;
|
||||||
using DysonNetwork.Shared.Data;
|
using DysonNetwork.Shared.Models;
|
||||||
using Microsoft.EntityFrameworkCore;
|
using Microsoft.EntityFrameworkCore;
|
||||||
using Microsoft.EntityFrameworkCore.Infrastructure;
|
using Microsoft.EntityFrameworkCore.Infrastructure;
|
||||||
using Microsoft.EntityFrameworkCore.Migrations;
|
using Microsoft.EntityFrameworkCore.Migrations;
|
||||||
|
@@ -1,7 +1,7 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using DysonNetwork.Drive.Storage;
|
using DysonNetwork.Drive.Storage;
|
||||||
using DysonNetwork.Shared.Data;
|
using DysonNetwork.Shared.Models;
|
||||||
using Microsoft.EntityFrameworkCore.Migrations;
|
using Microsoft.EntityFrameworkCore.Migrations;
|
||||||
using NodaTime;
|
using NodaTime;
|
||||||
|
|
||||||
|
@@ -2,7 +2,7 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using DysonNetwork.Drive;
|
using DysonNetwork.Drive;
|
||||||
using DysonNetwork.Shared.Data;
|
using DysonNetwork.Shared.Models;
|
||||||
using Microsoft.EntityFrameworkCore;
|
using Microsoft.EntityFrameworkCore;
|
||||||
using Microsoft.EntityFrameworkCore.Infrastructure;
|
using Microsoft.EntityFrameworkCore.Infrastructure;
|
||||||
using Microsoft.EntityFrameworkCore.Migrations;
|
using Microsoft.EntityFrameworkCore.Migrations;
|
||||||
|
@@ -2,8 +2,7 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using DysonNetwork.Drive;
|
using DysonNetwork.Drive;
|
||||||
using DysonNetwork.Drive.Storage;
|
using DysonNetwork.Shared.Models;
|
||||||
using DysonNetwork.Shared.Data;
|
|
||||||
using Microsoft.EntityFrameworkCore;
|
using Microsoft.EntityFrameworkCore;
|
||||||
using Microsoft.EntityFrameworkCore.Infrastructure;
|
using Microsoft.EntityFrameworkCore.Infrastructure;
|
||||||
using Microsoft.EntityFrameworkCore.Migrations;
|
using Microsoft.EntityFrameworkCore.Migrations;
|
||||||
|
@@ -1,6 +1,6 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using DysonNetwork.Drive.Storage;
|
using DysonNetwork.Shared.Models;
|
||||||
using Microsoft.EntityFrameworkCore.Migrations;
|
using Microsoft.EntityFrameworkCore.Migrations;
|
||||||
using NodaTime;
|
using NodaTime;
|
||||||
|
|
||||||
|
@@ -2,8 +2,7 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using DysonNetwork.Drive;
|
using DysonNetwork.Drive;
|
||||||
using DysonNetwork.Drive.Storage;
|
using DysonNetwork.Shared.Models;
|
||||||
using DysonNetwork.Shared.Data;
|
|
||||||
using Microsoft.EntityFrameworkCore;
|
using Microsoft.EntityFrameworkCore;
|
||||||
using Microsoft.EntityFrameworkCore.Infrastructure;
|
using Microsoft.EntityFrameworkCore.Infrastructure;
|
||||||
using Microsoft.EntityFrameworkCore.Migrations;
|
using Microsoft.EntityFrameworkCore.Migrations;
|
||||||
|
@@ -2,8 +2,7 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using DysonNetwork.Drive;
|
using DysonNetwork.Drive;
|
||||||
using DysonNetwork.Drive.Storage;
|
using DysonNetwork.Shared.Models;
|
||||||
using DysonNetwork.Shared.Data;
|
|
||||||
using Microsoft.EntityFrameworkCore;
|
using Microsoft.EntityFrameworkCore;
|
||||||
using Microsoft.EntityFrameworkCore.Infrastructure;
|
using Microsoft.EntityFrameworkCore.Infrastructure;
|
||||||
using Microsoft.EntityFrameworkCore.Migrations;
|
using Microsoft.EntityFrameworkCore.Migrations;
|
||||||
|
@@ -2,8 +2,7 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using DysonNetwork.Drive;
|
using DysonNetwork.Drive;
|
||||||
using DysonNetwork.Drive.Storage;
|
using DysonNetwork.Shared.Models;
|
||||||
using DysonNetwork.Shared.Data;
|
|
||||||
using Microsoft.EntityFrameworkCore;
|
using Microsoft.EntityFrameworkCore;
|
||||||
using Microsoft.EntityFrameworkCore.Infrastructure;
|
using Microsoft.EntityFrameworkCore.Infrastructure;
|
||||||
using Microsoft.EntityFrameworkCore.Migrations;
|
using Microsoft.EntityFrameworkCore.Migrations;
|
||||||
|
@@ -2,8 +2,7 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using DysonNetwork.Drive;
|
using DysonNetwork.Drive;
|
||||||
using DysonNetwork.Drive.Storage;
|
using DysonNetwork.Shared.Models;
|
||||||
using DysonNetwork.Shared.Data;
|
|
||||||
using Microsoft.EntityFrameworkCore;
|
using Microsoft.EntityFrameworkCore;
|
||||||
using Microsoft.EntityFrameworkCore.Infrastructure;
|
using Microsoft.EntityFrameworkCore.Infrastructure;
|
||||||
using Microsoft.EntityFrameworkCore.Migrations;
|
using Microsoft.EntityFrameworkCore.Migrations;
|
||||||
|
@@ -2,8 +2,7 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using DysonNetwork.Drive;
|
using DysonNetwork.Drive;
|
||||||
using DysonNetwork.Drive.Storage;
|
using DysonNetwork.Shared.Models;
|
||||||
using DysonNetwork.Shared.Data;
|
|
||||||
using Microsoft.EntityFrameworkCore;
|
using Microsoft.EntityFrameworkCore;
|
||||||
using Microsoft.EntityFrameworkCore.Infrastructure;
|
using Microsoft.EntityFrameworkCore.Infrastructure;
|
||||||
using Microsoft.EntityFrameworkCore.Migrations;
|
using Microsoft.EntityFrameworkCore.Migrations;
|
||||||
|
@@ -2,8 +2,7 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using DysonNetwork.Drive;
|
using DysonNetwork.Drive;
|
||||||
using DysonNetwork.Drive.Storage;
|
using DysonNetwork.Shared.Models;
|
||||||
using DysonNetwork.Shared.Data;
|
|
||||||
using Microsoft.EntityFrameworkCore;
|
using Microsoft.EntityFrameworkCore;
|
||||||
using Microsoft.EntityFrameworkCore.Infrastructure;
|
using Microsoft.EntityFrameworkCore.Infrastructure;
|
||||||
using Microsoft.EntityFrameworkCore.Migrations;
|
using Microsoft.EntityFrameworkCore.Migrations;
|
||||||
|
@@ -2,8 +2,7 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using DysonNetwork.Drive;
|
using DysonNetwork.Drive;
|
||||||
using DysonNetwork.Drive.Storage;
|
using DysonNetwork.Shared.Models;
|
||||||
using DysonNetwork.Shared.Data;
|
|
||||||
using Microsoft.EntityFrameworkCore;
|
using Microsoft.EntityFrameworkCore;
|
||||||
using Microsoft.EntityFrameworkCore.Infrastructure;
|
using Microsoft.EntityFrameworkCore.Infrastructure;
|
||||||
using Microsoft.EntityFrameworkCore.Migrations;
|
using Microsoft.EntityFrameworkCore.Migrations;
|
||||||
|
@@ -2,8 +2,7 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using DysonNetwork.Drive;
|
using DysonNetwork.Drive;
|
||||||
using DysonNetwork.Drive.Storage;
|
using DysonNetwork.Shared.Models;
|
||||||
using DysonNetwork.Shared.Data;
|
|
||||||
using Microsoft.EntityFrameworkCore;
|
using Microsoft.EntityFrameworkCore;
|
||||||
using Microsoft.EntityFrameworkCore.Infrastructure;
|
using Microsoft.EntityFrameworkCore.Infrastructure;
|
||||||
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
|
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
|
||||||
|
@@ -1,4 +1,5 @@
|
|||||||
using System.ComponentModel.DataAnnotations;
|
using System.ComponentModel.DataAnnotations;
|
||||||
|
using DysonNetwork.Shared.Models;
|
||||||
using DysonNetwork.Shared.Proto;
|
using DysonNetwork.Shared.Proto;
|
||||||
using Microsoft.AspNetCore.Authorization;
|
using Microsoft.AspNetCore.Authorization;
|
||||||
using Microsoft.AspNetCore.Mvc;
|
using Microsoft.AspNetCore.Mvc;
|
||||||
@@ -22,7 +23,7 @@ public class BundleController(AppDatabase db) : ControllerBase
|
|||||||
}
|
}
|
||||||
|
|
||||||
[HttpGet("{id:guid}")]
|
[HttpGet("{id:guid}")]
|
||||||
public async Task<ActionResult<FileBundle>> GetBundle([FromRoute] Guid id, [FromQuery] string? passcode)
|
public async Task<ActionResult<SnFileBundle>> GetBundle([FromRoute] Guid id, [FromQuery] string? passcode)
|
||||||
{
|
{
|
||||||
var bundle = await db.Bundles
|
var bundle = await db.Bundles
|
||||||
.Where(e => e.Id == id)
|
.Where(e => e.Id == id)
|
||||||
@@ -36,7 +37,7 @@ public class BundleController(AppDatabase db) : ControllerBase
|
|||||||
|
|
||||||
[HttpGet("me")]
|
[HttpGet("me")]
|
||||||
[Authorize]
|
[Authorize]
|
||||||
public async Task<ActionResult<List<FileBundle>>> ListBundles(
|
public async Task<ActionResult<List<SnFileBundle>>> ListBundles(
|
||||||
[FromQuery] string? term,
|
[FromQuery] string? term,
|
||||||
[FromQuery] int offset = 0,
|
[FromQuery] int offset = 0,
|
||||||
[FromQuery] int take = 20
|
[FromQuery] int take = 20
|
||||||
@@ -65,7 +66,7 @@ public class BundleController(AppDatabase db) : ControllerBase
|
|||||||
|
|
||||||
[HttpPost]
|
[HttpPost]
|
||||||
[Authorize]
|
[Authorize]
|
||||||
public async Task<ActionResult<FileBundle>> CreateBundle([FromBody] BundleRequest request)
|
public async Task<ActionResult<SnFileBundle>> CreateBundle([FromBody] BundleRequest request)
|
||||||
{
|
{
|
||||||
if (HttpContext.Items["CurrentUser"] is not Account currentUser) return Unauthorized();
|
if (HttpContext.Items["CurrentUser"] is not Account currentUser) return Unauthorized();
|
||||||
var accountId = Guid.Parse(currentUser.Id);
|
var accountId = Guid.Parse(currentUser.Id);
|
||||||
@@ -77,7 +78,7 @@ public class BundleController(AppDatabase db) : ControllerBase
|
|||||||
if (string.IsNullOrEmpty(request.Name))
|
if (string.IsNullOrEmpty(request.Name))
|
||||||
request.Name = "Unnamed Bundle";
|
request.Name = "Unnamed Bundle";
|
||||||
|
|
||||||
var bundle = new FileBundle
|
var bundle = new SnFileBundle
|
||||||
{
|
{
|
||||||
Slug = request.Slug,
|
Slug = request.Slug,
|
||||||
Name = request.Name,
|
Name = request.Name,
|
||||||
@@ -95,7 +96,7 @@ public class BundleController(AppDatabase db) : ControllerBase
|
|||||||
|
|
||||||
[HttpPut("{id:guid}")]
|
[HttpPut("{id:guid}")]
|
||||||
[Authorize]
|
[Authorize]
|
||||||
public async Task<ActionResult<FileBundle>> UpdateBundle([FromRoute] Guid id, [FromBody] BundleRequest request)
|
public async Task<ActionResult<SnFileBundle>> UpdateBundle([FromRoute] Guid id, [FromBody] BundleRequest request)
|
||||||
{
|
{
|
||||||
if (HttpContext.Items["CurrentUser"] is not Account currentUser) return Unauthorized();
|
if (HttpContext.Items["CurrentUser"] is not Account currentUser) return Unauthorized();
|
||||||
var accountId = Guid.Parse(currentUser.Id);
|
var accountId = Guid.Parse(currentUser.Id);
|
||||||
|
@@ -1,6 +1,6 @@
|
|||||||
using DysonNetwork.Drive.Billing;
|
using DysonNetwork.Drive.Billing;
|
||||||
using DysonNetwork.Shared.Auth;
|
using DysonNetwork.Shared.Auth;
|
||||||
using DysonNetwork.Shared.Data;
|
using DysonNetwork.Shared.Models;
|
||||||
using DysonNetwork.Shared.Proto;
|
using DysonNetwork.Shared.Proto;
|
||||||
using Microsoft.AspNetCore.Authorization;
|
using Microsoft.AspNetCore.Authorization;
|
||||||
using Microsoft.AspNetCore.Mvc;
|
using Microsoft.AspNetCore.Mvc;
|
||||||
|
@@ -1,3 +1,4 @@
|
|||||||
|
using DysonNetwork.Shared.Models;
|
||||||
using DysonNetwork.Shared.Proto;
|
using DysonNetwork.Shared.Proto;
|
||||||
using Microsoft.AspNetCore.Authorization;
|
using Microsoft.AspNetCore.Authorization;
|
||||||
using Microsoft.AspNetCore.Mvc;
|
using Microsoft.AspNetCore.Mvc;
|
||||||
|
@@ -1,4 +1,5 @@
|
|||||||
using DysonNetwork.Shared.Cache;
|
using DysonNetwork.Shared.Cache;
|
||||||
|
using DysonNetwork.Shared.Models;
|
||||||
using EFCore.BulkExtensions;
|
using EFCore.BulkExtensions;
|
||||||
using Microsoft.EntityFrameworkCore;
|
using Microsoft.EntityFrameworkCore;
|
||||||
using NodaTime;
|
using NodaTime;
|
||||||
@@ -347,7 +348,7 @@ public class FileReferenceService(AppDatabase db, FileService fileService, ICach
|
|||||||
/// <param name="resourceId">The ID of the resource</param>
|
/// <param name="resourceId">The ID of the resource</param>
|
||||||
/// <param name="usage">Optional filter by usage context</param>
|
/// <param name="usage">Optional filter by usage context</param>
|
||||||
/// <returns>A list of files referenced by the resource</returns>
|
/// <returns>A list of files referenced by the resource</returns>
|
||||||
public async Task<List<CloudFile>> GetResourceFilesAsync(string resourceId, string? usage = null)
|
public async Task<List<SnCloudFile>> GetResourceFilesAsync(string resourceId, string? usage = null)
|
||||||
{
|
{
|
||||||
var query = db.FileReferences.Where(r => r.ResourceId == resourceId);
|
var query = db.FileReferences.Where(r => r.ResourceId == resourceId);
|
||||||
|
|
||||||
|
@@ -12,9 +12,9 @@ using NATS.Client.Core;
|
|||||||
using NetVips;
|
using NetVips;
|
||||||
using NodaTime;
|
using NodaTime;
|
||||||
using System.Linq.Expressions;
|
using System.Linq.Expressions;
|
||||||
using DysonNetwork.Shared.Data;
|
|
||||||
using Microsoft.EntityFrameworkCore.Query;
|
using Microsoft.EntityFrameworkCore.Query;
|
||||||
using NATS.Net;
|
using NATS.Net;
|
||||||
|
using DysonNetwork.Shared.Models;
|
||||||
|
|
||||||
namespace DysonNetwork.Drive.Storage;
|
namespace DysonNetwork.Drive.Storage;
|
||||||
|
|
||||||
@@ -512,7 +512,7 @@ public class FileService(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private async Task<FileBundle?> GetBundleAsync(Guid id, Guid accountId)
|
private async Task<SnFileBundle?> GetBundleAsync(Guid id, Guid accountId)
|
||||||
{
|
{
|
||||||
var bundle = await db.Bundles
|
var bundle = await db.Bundles
|
||||||
.Where(e => e.Id == id)
|
.Where(e => e.Id == id)
|
||||||
@@ -569,7 +569,7 @@ public class FileService(
|
|||||||
await Task.WhenAll(tasks);
|
await Task.WhenAll(tasks);
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task<List<CloudFile?>> LoadFromReference(List<CloudFileReferenceObject> references)
|
public async Task<List<CloudFile?>> LoadFromReference(List<SnCloudFileReferenceObject> references)
|
||||||
{
|
{
|
||||||
var cachedFiles = new Dictionary<string, CloudFile>();
|
var cachedFiles = new Dictionary<string, CloudFile>();
|
||||||
var uncachedIds = new List<string>();
|
var uncachedIds = new List<string>();
|
||||||
|
@@ -1,3 +1,4 @@
|
|||||||
|
using DysonNetwork.Shared.Models;
|
||||||
using NodaTime;
|
using NodaTime;
|
||||||
|
|
||||||
namespace DysonNetwork.Drive.Storage.Model
|
namespace DysonNetwork.Drive.Storage.Model
|
||||||
@@ -18,7 +19,7 @@ namespace DysonNetwork.Drive.Storage.Model
|
|||||||
public class CreateUploadTaskResponse
|
public class CreateUploadTaskResponse
|
||||||
{
|
{
|
||||||
public bool FileExists { get; set; }
|
public bool FileExists { get; set; }
|
||||||
public CloudFile? File { get; set; }
|
public SnCloudFile? File { get; set; }
|
||||||
public string? TaskId { get; set; }
|
public string? TaskId { get; set; }
|
||||||
public long? ChunkSize { get; set; }
|
public long? ChunkSize { get; set; }
|
||||||
public int? ChunksCount { get; set; }
|
public int? ChunksCount { get; set; }
|
||||||
|
@@ -1,13 +0,0 @@
|
|||||||
{
|
|
||||||
"lockfileVersion": 1,
|
|
||||||
"workspaces": {
|
|
||||||
"": {
|
|
||||||
"dependencies": {
|
|
||||||
"highlight.js": "^11.11.1",
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
"packages": {
|
|
||||||
"highlight.js": ["highlight.js@11.11.1", "", {}, "sha512-Xwwo44whKBVCYoliBQwaPvtd/2tYFkRQtXDWj1nackaV2JPXx3L0+Jvd8/qCJ2p+ML0/XVkJ2q+Mr+UVdpJK5w=="],
|
|
||||||
}
|
|
||||||
}
|
|
@@ -1,16 +1,15 @@
|
|||||||
using System.ComponentModel.DataAnnotations;
|
using System.ComponentModel.DataAnnotations;
|
||||||
using DysonNetwork.Pass.Auth;
|
|
||||||
using DysonNetwork.Pass.Permission;
|
using DysonNetwork.Pass.Permission;
|
||||||
using DysonNetwork.Pass.Wallet;
|
using DysonNetwork.Pass.Wallet;
|
||||||
using DysonNetwork.Shared.Data;
|
|
||||||
using DysonNetwork.Shared.Error;
|
using DysonNetwork.Shared.Error;
|
||||||
|
using DysonNetwork.Shared.Models;
|
||||||
using DysonNetwork.Shared.Proto;
|
using DysonNetwork.Shared.Proto;
|
||||||
using Microsoft.AspNetCore.Authorization;
|
using Microsoft.AspNetCore.Authorization;
|
||||||
using Microsoft.AspNetCore.Mvc;
|
using Microsoft.AspNetCore.Mvc;
|
||||||
using Microsoft.EntityFrameworkCore;
|
using Microsoft.EntityFrameworkCore;
|
||||||
using NodaTime;
|
using NodaTime;
|
||||||
using AuthService = DysonNetwork.Pass.Auth.AuthService;
|
using AuthService = DysonNetwork.Pass.Auth.AuthService;
|
||||||
using AuthSession = DysonNetwork.Pass.Auth.AuthSession;
|
using SnAuthSession = DysonNetwork.Shared.Models.SnAuthSession;
|
||||||
|
|
||||||
namespace DysonNetwork.Pass.Account;
|
namespace DysonNetwork.Pass.Account;
|
||||||
|
|
||||||
@@ -132,7 +131,7 @@ public class AccountCurrentController(
|
|||||||
Usage = "profile.picture"
|
Usage = "profile.picture"
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
profile.Picture = CloudFileReferenceObject.FromProtoValue(file);
|
profile.Picture = SnCloudFileReferenceObject.FromProtoValue(file);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (request.BackgroundId is not null)
|
if (request.BackgroundId is not null)
|
||||||
@@ -150,7 +149,7 @@ public class AccountCurrentController(
|
|||||||
Usage = "profile.background"
|
Usage = "profile.background"
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
profile.Background = CloudFileReferenceObject.FromProtoValue(file);
|
profile.Background = SnCloudFileReferenceObject.FromProtoValue(file);
|
||||||
}
|
}
|
||||||
|
|
||||||
db.Update(profile);
|
db.Update(profile);
|
||||||
@@ -558,10 +557,10 @@ public class AccountCurrentController(
|
|||||||
|
|
||||||
[HttpGet("devices")]
|
[HttpGet("devices")]
|
||||||
[Authorize]
|
[Authorize]
|
||||||
public async Task<ActionResult<List<AuthClientWithChallenge>>> GetDevices()
|
public async Task<ActionResult<List<SnAuthClientWithChallenge>>> GetDevices()
|
||||||
{
|
{
|
||||||
if (HttpContext.Items["CurrentUser"] is not Account currentUser ||
|
if (HttpContext.Items["CurrentUser"] is not Account currentUser ||
|
||||||
HttpContext.Items["CurrentSession"] is not AuthSession currentSession) return Unauthorized();
|
HttpContext.Items["CurrentSession"] is not SnAuthSession currentSession) return Unauthorized();
|
||||||
|
|
||||||
Response.Headers.Append("X-Auth-Session", currentSession.Id.ToString());
|
Response.Headers.Append("X-Auth-Session", currentSession.Id.ToString());
|
||||||
|
|
||||||
@@ -569,7 +568,7 @@ public class AccountCurrentController(
|
|||||||
.Where(device => device.AccountId == currentUser.Id)
|
.Where(device => device.AccountId == currentUser.Id)
|
||||||
.ToListAsync();
|
.ToListAsync();
|
||||||
|
|
||||||
var challengeDevices = devices.Select(AuthClientWithChallenge.FromClient).ToList();
|
var challengeDevices = devices.Select(SnAuthClientWithChallenge.FromClient).ToList();
|
||||||
var deviceIds = challengeDevices.Select(x => x.Id).ToList();
|
var deviceIds = challengeDevices.Select(x => x.Id).ToList();
|
||||||
|
|
||||||
var authChallenges = await db.AuthChallenges
|
var authChallenges = await db.AuthChallenges
|
||||||
@@ -585,13 +584,13 @@ public class AccountCurrentController(
|
|||||||
|
|
||||||
[HttpGet("sessions")]
|
[HttpGet("sessions")]
|
||||||
[Authorize]
|
[Authorize]
|
||||||
public async Task<ActionResult<List<AuthSession>>> GetSessions(
|
public async Task<ActionResult<List<SnAuthSession>>> GetSessions(
|
||||||
[FromQuery] int take = 20,
|
[FromQuery] int take = 20,
|
||||||
[FromQuery] int offset = 0
|
[FromQuery] int offset = 0
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
if (HttpContext.Items["CurrentUser"] is not Account currentUser ||
|
if (HttpContext.Items["CurrentUser"] is not Account currentUser ||
|
||||||
HttpContext.Items["CurrentSession"] is not AuthSession currentSession) return Unauthorized();
|
HttpContext.Items["CurrentSession"] is not SnAuthSession currentSession) return Unauthorized();
|
||||||
|
|
||||||
var query = db.AuthSessions
|
var query = db.AuthSessions
|
||||||
.Include(session => session.Account)
|
.Include(session => session.Account)
|
||||||
@@ -613,7 +612,7 @@ public class AccountCurrentController(
|
|||||||
|
|
||||||
[HttpDelete("sessions/{id:guid}")]
|
[HttpDelete("sessions/{id:guid}")]
|
||||||
[Authorize]
|
[Authorize]
|
||||||
public async Task<ActionResult<AuthSession>> DeleteSession(Guid id)
|
public async Task<ActionResult<SnAuthSession>> DeleteSession(Guid id)
|
||||||
{
|
{
|
||||||
if (HttpContext.Items["CurrentUser"] is not Account currentUser) return Unauthorized();
|
if (HttpContext.Items["CurrentUser"] is not Account currentUser) return Unauthorized();
|
||||||
|
|
||||||
@@ -630,7 +629,7 @@ public class AccountCurrentController(
|
|||||||
|
|
||||||
[HttpDelete("devices/{deviceId}")]
|
[HttpDelete("devices/{deviceId}")]
|
||||||
[Authorize]
|
[Authorize]
|
||||||
public async Task<ActionResult<AuthSession>> DeleteDevice(string deviceId)
|
public async Task<ActionResult<SnAuthSession>> DeleteDevice(string deviceId)
|
||||||
{
|
{
|
||||||
if (HttpContext.Items["CurrentUser"] is not Account currentUser) return Unauthorized();
|
if (HttpContext.Items["CurrentUser"] is not Account currentUser) return Unauthorized();
|
||||||
|
|
||||||
@@ -647,10 +646,10 @@ public class AccountCurrentController(
|
|||||||
|
|
||||||
[HttpDelete("sessions/current")]
|
[HttpDelete("sessions/current")]
|
||||||
[Authorize]
|
[Authorize]
|
||||||
public async Task<ActionResult<AuthSession>> DeleteCurrentSession()
|
public async Task<ActionResult<SnAuthSession>> DeleteCurrentSession()
|
||||||
{
|
{
|
||||||
if (HttpContext.Items["CurrentUser"] is not Account currentUser ||
|
if (HttpContext.Items["CurrentUser"] is not Account currentUser ||
|
||||||
HttpContext.Items["CurrentSession"] is not AuthSession currentSession) return Unauthorized();
|
HttpContext.Items["CurrentSession"] is not SnAuthSession currentSession) return Unauthorized();
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
@@ -665,7 +664,7 @@ public class AccountCurrentController(
|
|||||||
|
|
||||||
[HttpPatch("devices/{deviceId}/label")]
|
[HttpPatch("devices/{deviceId}/label")]
|
||||||
[Authorize]
|
[Authorize]
|
||||||
public async Task<ActionResult<AuthSession>> UpdateDeviceLabel(string deviceId, [FromBody] string label)
|
public async Task<ActionResult<SnAuthSession>> UpdateDeviceLabel(string deviceId, [FromBody] string label)
|
||||||
{
|
{
|
||||||
if (HttpContext.Items["CurrentUser"] is not Account currentUser) return Unauthorized();
|
if (HttpContext.Items["CurrentUser"] is not Account currentUser) return Unauthorized();
|
||||||
|
|
||||||
@@ -682,10 +681,10 @@ public class AccountCurrentController(
|
|||||||
|
|
||||||
[HttpPatch("devices/current/label")]
|
[HttpPatch("devices/current/label")]
|
||||||
[Authorize]
|
[Authorize]
|
||||||
public async Task<ActionResult<AuthSession>> UpdateCurrentDeviceLabel([FromBody] string label)
|
public async Task<ActionResult<SnAuthSession>> UpdateCurrentDeviceLabel([FromBody] string label)
|
||||||
{
|
{
|
||||||
if (HttpContext.Items["CurrentUser"] is not Account currentUser ||
|
if (HttpContext.Items["CurrentUser"] is not Account currentUser ||
|
||||||
HttpContext.Items["CurrentSession"] is not AuthSession currentSession) return Unauthorized();
|
HttpContext.Items["CurrentSession"] is not SnAuthSession currentSession) return Unauthorized();
|
||||||
|
|
||||||
var device = await db.AuthClients.FirstOrDefaultAsync(d => d.Id == currentSession.Challenge.ClientId);
|
var device = await db.AuthClients.FirstOrDefaultAsync(d => d.Id == currentSession.Challenge.ClientId);
|
||||||
if (device is null) return NotFound();
|
if (device is null) return NotFound();
|
||||||
|
@@ -1,6 +1,7 @@
|
|||||||
using System.Globalization;
|
using System.Globalization;
|
||||||
using DysonNetwork.Pass.Wallet;
|
using DysonNetwork.Pass.Wallet;
|
||||||
using DysonNetwork.Shared.Cache;
|
using DysonNetwork.Shared.Cache;
|
||||||
|
using DysonNetwork.Shared.Models;
|
||||||
using DysonNetwork.Shared.Proto;
|
using DysonNetwork.Shared.Proto;
|
||||||
using Microsoft.EntityFrameworkCore;
|
using Microsoft.EntityFrameworkCore;
|
||||||
using Microsoft.Extensions.Localization;
|
using Microsoft.Extensions.Localization;
|
||||||
|
@@ -1,12 +1,11 @@
|
|||||||
using System.Globalization;
|
using System.Globalization;
|
||||||
using System.Text.Json;
|
using System.Text.Json;
|
||||||
using DysonNetwork.Pass.Auth;
|
|
||||||
using DysonNetwork.Pass.Auth.OpenId;
|
using DysonNetwork.Pass.Auth.OpenId;
|
||||||
using DysonNetwork.Pass.Localization;
|
using DysonNetwork.Pass.Localization;
|
||||||
using DysonNetwork.Pass.Mailer;
|
using DysonNetwork.Pass.Mailer;
|
||||||
using DysonNetwork.Pass.Permission;
|
using DysonNetwork.Pass.Permission;
|
||||||
using DysonNetwork.Shared.Cache;
|
using DysonNetwork.Shared.Cache;
|
||||||
using DysonNetwork.Shared.Data;
|
using DysonNetwork.Shared.Models;
|
||||||
using DysonNetwork.Shared.Proto;
|
using DysonNetwork.Shared.Proto;
|
||||||
using DysonNetwork.Shared.Stream;
|
using DysonNetwork.Shared.Stream;
|
||||||
using EFCore.BulkExtensions;
|
using EFCore.BulkExtensions;
|
||||||
@@ -141,7 +140,7 @@ public class AccountService(
|
|||||||
var defaultGroup = await db.PermissionGroups.FirstOrDefaultAsync(g => g.Key == "default");
|
var defaultGroup = await db.PermissionGroups.FirstOrDefaultAsync(g => g.Key == "default");
|
||||||
if (defaultGroup is not null)
|
if (defaultGroup is not null)
|
||||||
{
|
{
|
||||||
db.PermissionGroupMembers.Add(new PermissionGroupMember
|
db.PermissionGroupMembers.Add(new SnPermissionGroupMember
|
||||||
{
|
{
|
||||||
Actor = $"user:{account.Id}",
|
Actor = $"user:{account.Id}",
|
||||||
Group = defaultGroup
|
Group = defaultGroup
|
||||||
@@ -217,7 +216,7 @@ public class AccountService(
|
|||||||
Usage = "profile.picture"
|
Usage = "profile.picture"
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
account.Profile.Picture = CloudFileReferenceObject.FromProtoValue(file);
|
account.Profile.Picture = SnCloudFileReferenceObject.FromProtoValue(file);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!string.IsNullOrEmpty(backgroundId))
|
if (!string.IsNullOrEmpty(backgroundId))
|
||||||
@@ -231,7 +230,7 @@ public class AccountService(
|
|||||||
Usage = "profile.background"
|
Usage = "profile.background"
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
account.Profile.Background = CloudFileReferenceObject.FromProtoValue(file);
|
account.Profile.Background = SnCloudFileReferenceObject.FromProtoValue(file);
|
||||||
}
|
}
|
||||||
|
|
||||||
db.Accounts.Add(account);
|
db.Accounts.Add(account);
|
||||||
@@ -516,7 +515,7 @@ public class AccountService(
|
|||||||
.AnyAsync(s => s.Challenge.ClientId == id);
|
.AnyAsync(s => s.Challenge.ClientId == id);
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task<AuthClient> UpdateDeviceName(Account account, string deviceId, string label)
|
public async Task<SnAuthClient> UpdateDeviceName(Account account, string deviceId, string label)
|
||||||
{
|
{
|
||||||
var device = await db.AuthClients.FirstOrDefaultAsync(c => c.DeviceId == deviceId && c.AccountId == account.Id
|
var device = await db.AuthClients.FirstOrDefaultAsync(c => c.DeviceId == deviceId && c.AccountId == account.Id
|
||||||
);
|
);
|
||||||
|
@@ -1,5 +1,6 @@
|
|||||||
using DysonNetwork.Shared.Cache;
|
using DysonNetwork.Shared.Cache;
|
||||||
using DysonNetwork.Shared.GeoIp;
|
using DysonNetwork.Shared.GeoIp;
|
||||||
|
using DysonNetwork.Shared.Models;
|
||||||
|
|
||||||
namespace DysonNetwork.Pass.Account;
|
namespace DysonNetwork.Pass.Account;
|
||||||
|
|
||||||
@@ -36,7 +37,7 @@ public class ActionLogService(GeoIpService geo, FlushBufferService fbs)
|
|||||||
else
|
else
|
||||||
throw new ArgumentException("No user context was found");
|
throw new ArgumentException("No user context was found");
|
||||||
|
|
||||||
if (request.HttpContext.Items["CurrentSession"] is Auth.AuthSession currentSession)
|
if (request.HttpContext.Items["CurrentSession"] is SnAuthSession currentSession)
|
||||||
log.SessionId = currentSession.Id;
|
log.SessionId = currentSession.Id;
|
||||||
|
|
||||||
fbs.Enqueue(log);
|
fbs.Enqueue(log);
|
||||||
|
@@ -1,4 +1,4 @@
|
|||||||
using DysonNetwork.Shared.Data;
|
using DysonNetwork.Shared.Models;
|
||||||
using DysonNetwork.Shared.Proto;
|
using DysonNetwork.Shared.Proto;
|
||||||
using Grpc.Core;
|
using Grpc.Core;
|
||||||
using Microsoft.EntityFrameworkCore;
|
using Microsoft.EntityFrameworkCore;
|
||||||
@@ -65,7 +65,7 @@ public class BotAccountReceiverGrpc(
|
|||||||
Usage = "profile.picture"
|
Usage = "profile.picture"
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
account.Profile.Picture = CloudFileReferenceObject.FromProtoValue(file);
|
account.Profile.Picture = SnCloudFileReferenceObject.FromProtoValue(file);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (request.BackgroundId is not null)
|
if (request.BackgroundId is not null)
|
||||||
@@ -83,7 +83,7 @@ public class BotAccountReceiverGrpc(
|
|||||||
Usage = "profile.background"
|
Usage = "profile.background"
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
account.Profile.Background = CloudFileReferenceObject.FromProtoValue(file);
|
account.Profile.Background = SnCloudFileReferenceObject.FromProtoValue(file);
|
||||||
}
|
}
|
||||||
|
|
||||||
db.Accounts.Update(account);
|
db.Accounts.Update(account);
|
||||||
|
@@ -3,12 +3,9 @@ using System.Reflection;
|
|||||||
using System.Text.Json;
|
using System.Text.Json;
|
||||||
using System.Text.Json.Serialization;
|
using System.Text.Json.Serialization;
|
||||||
using DysonNetwork.Pass.Account;
|
using DysonNetwork.Pass.Account;
|
||||||
using DysonNetwork.Pass.Auth;
|
|
||||||
using DysonNetwork.Pass.Credit;
|
|
||||||
using DysonNetwork.Pass.Leveling;
|
|
||||||
using DysonNetwork.Pass.Permission;
|
using DysonNetwork.Pass.Permission;
|
||||||
using DysonNetwork.Pass.Wallet;
|
|
||||||
using DysonNetwork.Shared.Data;
|
using DysonNetwork.Shared.Data;
|
||||||
|
using DysonNetwork.Shared.Models;
|
||||||
using Microsoft.EntityFrameworkCore;
|
using Microsoft.EntityFrameworkCore;
|
||||||
using Microsoft.EntityFrameworkCore.Design;
|
using Microsoft.EntityFrameworkCore.Design;
|
||||||
using Microsoft.EntityFrameworkCore.Query;
|
using Microsoft.EntityFrameworkCore.Query;
|
||||||
@@ -22,36 +19,36 @@ public class AppDatabase(
|
|||||||
IConfiguration configuration
|
IConfiguration configuration
|
||||||
) : DbContext(options)
|
) : DbContext(options)
|
||||||
{
|
{
|
||||||
public DbSet<PermissionNode> PermissionNodes { get; set; } = null!;
|
public DbSet<SnPermissionNode> PermissionNodes { get; set; } = null!;
|
||||||
public DbSet<PermissionGroup> PermissionGroups { get; set; } = null!;
|
public DbSet<SnPermissionGroup> PermissionGroups { get; set; } = null!;
|
||||||
public DbSet<PermissionGroupMember> PermissionGroupMembers { get; set; } = null!;
|
public DbSet<SnPermissionGroupMember> PermissionGroupMembers { get; set; } = null!;
|
||||||
|
|
||||||
public DbSet<MagicSpell> MagicSpells { get; set; } = null!;
|
public DbSet<SnMagicSpell> MagicSpells { get; set; } = null!;
|
||||||
public DbSet<Account.Account> Accounts { get; set; } = null!;
|
public DbSet<Account.Account> Accounts { get; set; } = null!;
|
||||||
public DbSet<AccountConnection> AccountConnections { get; set; } = null!;
|
public DbSet<AccountConnection> AccountConnections { get; set; } = null!;
|
||||||
public DbSet<AccountProfile> AccountProfiles { get; set; } = null!;
|
public DbSet<SnAccountProfile> AccountProfiles { get; set; } = null!;
|
||||||
public DbSet<AccountContact> AccountContacts { get; set; } = null!;
|
public DbSet<AccountContact> AccountContacts { get; set; } = null!;
|
||||||
public DbSet<AccountAuthFactor> AccountAuthFactors { get; set; } = null!;
|
public DbSet<AccountAuthFactor> AccountAuthFactors { get; set; } = null!;
|
||||||
public DbSet<Relationship> AccountRelationships { get; set; } = null!;
|
public DbSet<SnAccountRelationship> AccountRelationships { get; set; } = null!;
|
||||||
public DbSet<Status> AccountStatuses { get; set; } = null!;
|
public DbSet<SnAccountStatus> AccountStatuses { get; set; } = null!;
|
||||||
public DbSet<CheckInResult> AccountCheckInResults { get; set; } = null!;
|
public DbSet<SnCheckInResult> AccountCheckInResults { get; set; } = null!;
|
||||||
public DbSet<AccountBadge> Badges { get; set; } = null!;
|
public DbSet<SnAccountBadge> Badges { get; set; } = null!;
|
||||||
public DbSet<ActionLog> ActionLogs { get; set; } = null!;
|
public DbSet<ActionLog> ActionLogs { get; set; } = null!;
|
||||||
public DbSet<AbuseReport> AbuseReports { get; set; } = null!;
|
public DbSet<SnAbuseReport> AbuseReports { get; set; } = null!;
|
||||||
|
|
||||||
public DbSet<AuthSession> AuthSessions { get; set; } = null!;
|
public DbSet<SnAuthSession> AuthSessions { get; set; } = null!;
|
||||||
public DbSet<AuthChallenge> AuthChallenges { get; set; } = null!;
|
public DbSet<SnAuthChallenge> AuthChallenges { get; set; } = null!;
|
||||||
public DbSet<AuthClient> AuthClients { get; set; } = null!;
|
public DbSet<SnAuthClient> AuthClients { get; set; } = null!;
|
||||||
public DbSet<ApiKey> ApiKeys { get; set; } = null!;
|
public DbSet<SnApiKey> ApiKeys { get; set; } = null!;
|
||||||
|
|
||||||
public DbSet<Wallet.Wallet> Wallets { get; set; } = null!;
|
public DbSet<Shared.Models.SnWallet> Wallets { get; set; } = null!;
|
||||||
public DbSet<WalletPocket> WalletPockets { get; set; } = null!;
|
public DbSet<SnWalletPocket> WalletPockets { get; set; } = null!;
|
||||||
public DbSet<Order> PaymentOrders { get; set; } = null!;
|
public DbSet<SnWalletOrder> PaymentOrders { get; set; } = null!;
|
||||||
public DbSet<Transaction> PaymentTransactions { get; set; } = null!;
|
public DbSet<SnWalletTransaction> PaymentTransactions { get; set; } = null!;
|
||||||
public DbSet<Subscription> WalletSubscriptions { get; set; } = null!;
|
public DbSet<SnSubscription> WalletSubscriptions { get; set; } = null!;
|
||||||
public DbSet<Coupon> WalletCoupons { get; set; } = null!;
|
public DbSet<Coupon> WalletCoupons { get; set; } = null!;
|
||||||
|
|
||||||
public DbSet<Punishment> Punishments { get; set; } = null!;
|
public DbSet<SnAccountPunishment> Punishments { get; set; } = null!;
|
||||||
|
|
||||||
public DbSet<SocialCreditRecord> SocialCreditRecords { get; set; } = null!;
|
public DbSet<SocialCreditRecord> SocialCreditRecords { get; set; } = null!;
|
||||||
public DbSet<ExperienceRecord> ExperienceRecords { get; set; } = null!;
|
public DbSet<ExperienceRecord> ExperienceRecords { get; set; } = null!;
|
||||||
@@ -74,11 +71,11 @@ public class AppDatabase(
|
|||||||
|
|
||||||
optionsBuilder.UseAsyncSeeding(async (context, _, cancellationToken) =>
|
optionsBuilder.UseAsyncSeeding(async (context, _, cancellationToken) =>
|
||||||
{
|
{
|
||||||
var defaultPermissionGroup = await context.Set<PermissionGroup>()
|
var defaultPermissionGroup = await context.Set<SnPermissionGroup>()
|
||||||
.FirstOrDefaultAsync(g => g.Key == "default", cancellationToken);
|
.FirstOrDefaultAsync(g => g.Key == "default", cancellationToken);
|
||||||
if (defaultPermissionGroup is null)
|
if (defaultPermissionGroup is null)
|
||||||
{
|
{
|
||||||
context.Set<PermissionGroup>().Add(new PermissionGroup
|
context.Set<SnPermissionGroup>().Add(new SnPermissionGroup
|
||||||
{
|
{
|
||||||
Key = "default",
|
Key = "default",
|
||||||
Nodes = new List<string>
|
Nodes = new List<string>
|
||||||
@@ -111,21 +108,21 @@ public class AppDatabase(
|
|||||||
{
|
{
|
||||||
base.OnModelCreating(modelBuilder);
|
base.OnModelCreating(modelBuilder);
|
||||||
|
|
||||||
modelBuilder.Entity<PermissionGroupMember>()
|
modelBuilder.Entity<SnPermissionGroupMember>()
|
||||||
.HasKey(pg => new { pg.GroupId, pg.Actor });
|
.HasKey(pg => new { pg.GroupId, pg.Actor });
|
||||||
modelBuilder.Entity<PermissionGroupMember>()
|
modelBuilder.Entity<SnPermissionGroupMember>()
|
||||||
.HasOne(pg => pg.Group)
|
.HasOne(pg => pg.Group)
|
||||||
.WithMany(g => g.Members)
|
.WithMany(g => g.Members)
|
||||||
.HasForeignKey(pg => pg.GroupId)
|
.HasForeignKey(pg => pg.GroupId)
|
||||||
.OnDelete(DeleteBehavior.Cascade);
|
.OnDelete(DeleteBehavior.Cascade);
|
||||||
|
|
||||||
modelBuilder.Entity<Relationship>()
|
modelBuilder.Entity<SnAccountRelationship>()
|
||||||
.HasKey(r => new { FromAccountId = r.AccountId, ToAccountId = r.RelatedId });
|
.HasKey(r => new { FromAccountId = r.AccountId, ToAccountId = r.RelatedId });
|
||||||
modelBuilder.Entity<Relationship>()
|
modelBuilder.Entity<SnAccountRelationship>()
|
||||||
.HasOne(r => r.Account)
|
.HasOne(r => r.Account)
|
||||||
.WithMany(a => a.OutgoingRelationships)
|
.WithMany(a => a.OutgoingRelationships)
|
||||||
.HasForeignKey(r => r.AccountId);
|
.HasForeignKey(r => r.AccountId);
|
||||||
modelBuilder.Entity<Relationship>()
|
modelBuilder.Entity<SnAccountRelationship>()
|
||||||
.HasOne(r => r.Related)
|
.HasOne(r => r.Related)
|
||||||
.WithMany(a => a.IncomingRelationships)
|
.WithMany(a => a.IncomingRelationships)
|
||||||
.HasForeignKey(r => r.RelatedId);
|
.HasForeignKey(r => r.RelatedId);
|
||||||
|
@@ -11,6 +11,7 @@ using Microsoft.Extensions.Localization;
|
|||||||
using AccountAuthFactor = DysonNetwork.Pass.Account.AccountAuthFactor;
|
using AccountAuthFactor = DysonNetwork.Pass.Account.AccountAuthFactor;
|
||||||
using AccountService = DysonNetwork.Pass.Account.AccountService;
|
using AccountService = DysonNetwork.Pass.Account.AccountService;
|
||||||
using ActionLogService = DysonNetwork.Pass.Account.ActionLogService;
|
using ActionLogService = DysonNetwork.Pass.Account.ActionLogService;
|
||||||
|
using DysonNetwork.Shared.Models;
|
||||||
|
|
||||||
namespace DysonNetwork.Pass.Auth;
|
namespace DysonNetwork.Pass.Auth;
|
||||||
|
|
||||||
|
@@ -3,6 +3,7 @@ using System.Text.Json;
|
|||||||
using System.Text.Json.Serialization;
|
using System.Text.Json.Serialization;
|
||||||
using DysonNetwork.Pass.Account;
|
using DysonNetwork.Pass.Account;
|
||||||
using DysonNetwork.Shared.Cache;
|
using DysonNetwork.Shared.Cache;
|
||||||
|
using DysonNetwork.Shared.Models;
|
||||||
using Microsoft.EntityFrameworkCore;
|
using Microsoft.EntityFrameworkCore;
|
||||||
using NodaTime;
|
using NodaTime;
|
||||||
|
|
||||||
@@ -76,10 +77,10 @@ public class AuthService(
|
|||||||
return totalRequiredSteps;
|
return totalRequiredSteps;
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task<AuthSession> CreateSessionForOidcAsync(Account.Account account, Instant time,
|
public async Task<SnAuthSession> CreateSessionForOidcAsync(Account.Account account, Instant time,
|
||||||
Guid? customAppId = null)
|
Guid? customAppId = null)
|
||||||
{
|
{
|
||||||
var challenge = new AuthChallenge
|
var challenge = new SnAuthChallenge
|
||||||
{
|
{
|
||||||
AccountId = account.Id,
|
AccountId = account.Id,
|
||||||
IpAddress = HttpContext.Connection.RemoteIpAddress?.ToString(),
|
IpAddress = HttpContext.Connection.RemoteIpAddress?.ToString(),
|
||||||
@@ -89,7 +90,7 @@ public class AuthService(
|
|||||||
Type = customAppId is not null ? ChallengeType.OAuth : ChallengeType.Oidc
|
Type = customAppId is not null ? ChallengeType.OAuth : ChallengeType.Oidc
|
||||||
};
|
};
|
||||||
|
|
||||||
var session = new AuthSession
|
var session = new SnAuthSession
|
||||||
{
|
{
|
||||||
AccountId = account.Id,
|
AccountId = account.Id,
|
||||||
CreatedAt = time,
|
CreatedAt = time,
|
||||||
@@ -105,7 +106,7 @@ public class AuthService(
|
|||||||
return session;
|
return session;
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task<AuthClient> GetOrCreateDeviceAsync(
|
public async Task<SnAuthClient> GetOrCreateDeviceAsync(
|
||||||
Guid accountId,
|
Guid accountId,
|
||||||
string deviceId,
|
string deviceId,
|
||||||
string? deviceName = null,
|
string? deviceName = null,
|
||||||
@@ -114,7 +115,7 @@ public class AuthService(
|
|||||||
{
|
{
|
||||||
var device = await db.AuthClients.FirstOrDefaultAsync(d => d.DeviceId == deviceId && d.AccountId == accountId);
|
var device = await db.AuthClients.FirstOrDefaultAsync(d => d.DeviceId == deviceId && d.AccountId == accountId);
|
||||||
if (device is not null) return device;
|
if (device is not null) return device;
|
||||||
device = new AuthClient
|
device = new SnAuthClient
|
||||||
{
|
{
|
||||||
Platform = platform,
|
Platform = platform,
|
||||||
DeviceId = deviceId,
|
DeviceId = deviceId,
|
||||||
@@ -181,7 +182,7 @@ public class AuthService(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public string CreateToken(AuthSession session)
|
public string CreateToken(SnAuthSession session)
|
||||||
{
|
{
|
||||||
// Load the private key for signing
|
// Load the private key for signing
|
||||||
var privateKeyPem = File.ReadAllText(config["AuthToken:PrivateKeyPath"]!);
|
var privateKeyPem = File.ReadAllText(config["AuthToken:PrivateKeyPath"]!);
|
||||||
@@ -199,7 +200,7 @@ public class AuthService(
|
|||||||
/// <param name="challenge">Completed challenge</param>
|
/// <param name="challenge">Completed challenge</param>
|
||||||
/// <returns>Signed compact token</returns>
|
/// <returns>Signed compact token</returns>
|
||||||
/// <exception cref="ArgumentException">If challenge not completed or session already exists</exception>
|
/// <exception cref="ArgumentException">If challenge not completed or session already exists</exception>
|
||||||
public async Task<string> CreateSessionAndIssueToken(AuthChallenge challenge)
|
public async Task<string> CreateSessionAndIssueToken(SnAuthChallenge challenge)
|
||||||
{
|
{
|
||||||
if (challenge.StepRemain != 0)
|
if (challenge.StepRemain != 0)
|
||||||
throw new ArgumentException("Challenge not yet completed.");
|
throw new ArgumentException("Challenge not yet completed.");
|
||||||
@@ -210,7 +211,7 @@ public class AuthService(
|
|||||||
throw new ArgumentException("Session already exists for this challenge.");
|
throw new ArgumentException("Session already exists for this challenge.");
|
||||||
|
|
||||||
var now = SystemClock.Instance.GetCurrentInstant();
|
var now = SystemClock.Instance.GetCurrentInstant();
|
||||||
var session = new AuthSession
|
var session = new SnAuthSession
|
||||||
{
|
{
|
||||||
LastGrantedAt = now,
|
LastGrantedAt = now,
|
||||||
ExpiredAt = now.Plus(Duration.FromDays(7)),
|
ExpiredAt = now.Plus(Duration.FromDays(7)),
|
||||||
@@ -256,7 +257,7 @@ public class AuthService(
|
|||||||
return $"{payloadBase64}.{signatureBase64}";
|
return $"{payloadBase64}.{signatureBase64}";
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task<bool> ValidateSudoMode(AuthSession session, string? pinCode)
|
public async Task<bool> ValidateSudoMode(SnAuthSession session, string? pinCode)
|
||||||
{
|
{
|
||||||
// Check if the session is already in sudo mode (cached)
|
// Check if the session is already in sudo mode (cached)
|
||||||
var sudoModeKey = $"accounts:{session.Id}:sudo";
|
var sudoModeKey = $"accounts:{session.Id}:sudo";
|
||||||
@@ -319,7 +320,7 @@ public class AuthService(
|
|||||||
return factor.VerifyPassword(pinCode);
|
return factor.VerifyPassword(pinCode);
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task<ApiKey?> GetApiKey(Guid id, Guid? accountId = null)
|
public async Task<SnApiKey?> GetApiKey(Guid id, Guid? accountId = null)
|
||||||
{
|
{
|
||||||
var key = await db.ApiKeys
|
var key = await db.ApiKeys
|
||||||
.Include(e => e.Session)
|
.Include(e => e.Session)
|
||||||
@@ -329,13 +330,13 @@ public class AuthService(
|
|||||||
return key;
|
return key;
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task<ApiKey> CreateApiKey(Guid accountId, string label, Instant? expiredAt = null)
|
public async Task<SnApiKey> CreateApiKey(Guid accountId, string label, Instant? expiredAt = null)
|
||||||
{
|
{
|
||||||
var key = new ApiKey
|
var key = new SnApiKey
|
||||||
{
|
{
|
||||||
AccountId = accountId,
|
AccountId = accountId,
|
||||||
Label = label,
|
Label = label,
|
||||||
Session = new AuthSession
|
Session = new SnAuthSession
|
||||||
{
|
{
|
||||||
AccountId = accountId,
|
AccountId = accountId,
|
||||||
ExpiredAt = expiredAt
|
ExpiredAt = expiredAt
|
||||||
@@ -348,7 +349,7 @@ public class AuthService(
|
|||||||
return key;
|
return key;
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task<string> IssueApiKeyToken(ApiKey key)
|
public async Task<string> IssueApiKeyToken(SnApiKey key)
|
||||||
{
|
{
|
||||||
key.Session.LastGrantedAt = SystemClock.Instance.GetCurrentInstant();
|
key.Session.LastGrantedAt = SystemClock.Instance.GetCurrentInstant();
|
||||||
db.Update(key.Session);
|
db.Update(key.Session);
|
||||||
@@ -357,14 +358,14 @@ public class AuthService(
|
|||||||
return tk;
|
return tk;
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task RevokeApiKeyToken(ApiKey key)
|
public async Task RevokeApiKeyToken(SnApiKey key)
|
||||||
{
|
{
|
||||||
db.Remove(key);
|
db.Remove(key);
|
||||||
db.Remove(key.Session);
|
db.Remove(key.Session);
|
||||||
await db.SaveChangesAsync();
|
await db.SaveChangesAsync();
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task<ApiKey> RotateApiKeyToken(ApiKey key)
|
public async Task<SnApiKey> RotateApiKeyToken(SnApiKey key)
|
||||||
{
|
{
|
||||||
await using var transaction = await db.Database.BeginTransactionAsync();
|
await using var transaction = await db.Database.BeginTransactionAsync();
|
||||||
try
|
try
|
||||||
@@ -372,7 +373,7 @@ public class AuthService(
|
|||||||
var oldSessionId = key.SessionId;
|
var oldSessionId = key.SessionId;
|
||||||
|
|
||||||
// Create new session
|
// Create new session
|
||||||
var newSession = new AuthSession
|
var newSession = new SnAuthSession
|
||||||
{
|
{
|
||||||
AccountId = key.AccountId,
|
AccountId = key.AccountId,
|
||||||
ExpiredAt = key.Session?.ExpiredAt
|
ExpiredAt = key.Session?.ExpiredAt
|
||||||
|
@@ -1,4 +1,5 @@
|
|||||||
using System.Security.Cryptography;
|
using System.Security.Cryptography;
|
||||||
|
using DysonNetwork.Shared.Models;
|
||||||
|
|
||||||
namespace DysonNetwork.Pass.Auth;
|
namespace DysonNetwork.Pass.Auth;
|
||||||
|
|
||||||
@@ -7,7 +8,7 @@ public class CompactTokenService(IConfiguration config)
|
|||||||
private readonly string _privateKeyPath = config["AuthToken:PrivateKeyPath"]
|
private readonly string _privateKeyPath = config["AuthToken:PrivateKeyPath"]
|
||||||
?? throw new InvalidOperationException("AuthToken:PrivateKeyPath configuration is missing");
|
?? throw new InvalidOperationException("AuthToken:PrivateKeyPath configuration is missing");
|
||||||
|
|
||||||
public string CreateToken(AuthSession session)
|
public string CreateToken(SnAuthSession session)
|
||||||
{
|
{
|
||||||
// Load the private key for signing
|
// Load the private key for signing
|
||||||
var privateKeyPem = File.ReadAllText(_privateKeyPath);
|
var privateKeyPem = File.ReadAllText(_privateKeyPath);
|
||||||
|
@@ -8,10 +8,10 @@ using System.Text.Json.Serialization;
|
|||||||
using System.Web;
|
using System.Web;
|
||||||
using DysonNetwork.Pass.Account;
|
using DysonNetwork.Pass.Account;
|
||||||
using DysonNetwork.Pass.Auth.OidcProvider.Options;
|
using DysonNetwork.Pass.Auth.OidcProvider.Options;
|
||||||
using DysonNetwork.Shared.Data;
|
|
||||||
using Microsoft.EntityFrameworkCore;
|
using Microsoft.EntityFrameworkCore;
|
||||||
using Microsoft.IdentityModel.Tokens;
|
using Microsoft.IdentityModel.Tokens;
|
||||||
using NodaTime;
|
using NodaTime;
|
||||||
|
using DysonNetwork.Shared.Models;
|
||||||
|
|
||||||
namespace DysonNetwork.Pass.Auth.OidcProvider.Controllers;
|
namespace DysonNetwork.Pass.Auth.OidcProvider.Controllers;
|
||||||
|
|
||||||
@@ -98,9 +98,9 @@ public class OidcProviderController(
|
|||||||
var clientInfo = new ClientInfoResponse
|
var clientInfo = new ClientInfoResponse
|
||||||
{
|
{
|
||||||
ClientId = Guid.Parse(client.Id),
|
ClientId = Guid.Parse(client.Id),
|
||||||
Picture = client.Picture is not null ? CloudFileReferenceObject.FromProtoValue(client.Picture) : null,
|
Picture = client.Picture is not null ? SnCloudFileReferenceObject.FromProtoValue(client.Picture) : null,
|
||||||
Background = client.Background is not null
|
Background = client.Background is not null
|
||||||
? CloudFileReferenceObject.FromProtoValue(client.Background)
|
? SnCloudFileReferenceObject.FromProtoValue(client.Background)
|
||||||
: null,
|
: null,
|
||||||
ClientName = client.Name,
|
ClientName = client.Name,
|
||||||
HomeUri = client.Links.HomePage,
|
HomeUri = client.Links.HomePage,
|
||||||
@@ -304,7 +304,7 @@ public class OidcProviderController(
|
|||||||
public async Task<IActionResult> GetUserInfo()
|
public async Task<IActionResult> GetUserInfo()
|
||||||
{
|
{
|
||||||
if (HttpContext.Items["CurrentUser"] is not Account.Account currentUser ||
|
if (HttpContext.Items["CurrentUser"] is not Account.Account currentUser ||
|
||||||
HttpContext.Items["CurrentSession"] is not AuthSession currentSession) return Unauthorized();
|
HttpContext.Items["CurrentSession"] is not SnAuthSession currentSession) return Unauthorized();
|
||||||
|
|
||||||
// Get requested scopes from the token
|
// Get requested scopes from the token
|
||||||
var scopes = currentSession.Challenge?.Scopes ?? [];
|
var scopes = currentSession.Challenge?.Scopes ?? [];
|
||||||
|
@@ -1,13 +1,13 @@
|
|||||||
using System.Text.Json.Serialization;
|
using System.Text.Json.Serialization;
|
||||||
using DysonNetwork.Shared.Data;
|
using DysonNetwork.Shared.Models;
|
||||||
|
|
||||||
namespace DysonNetwork.Pass.Auth.OidcProvider.Responses;
|
namespace DysonNetwork.Pass.Auth.OidcProvider.Responses;
|
||||||
|
|
||||||
public class ClientInfoResponse
|
public class ClientInfoResponse
|
||||||
{
|
{
|
||||||
public Guid ClientId { get; set; }
|
public Guid ClientId { get; set; }
|
||||||
public CloudFileReferenceObject? Picture { get; set; }
|
public SnCloudFileReferenceObject? Picture { get; set; }
|
||||||
public CloudFileReferenceObject? Background { get; set; }
|
public SnCloudFileReferenceObject? Background { get; set; }
|
||||||
public string? ClientName { get; set; }
|
public string? ClientName { get; set; }
|
||||||
public string? HomeUri { get; set; }
|
public string? HomeUri { get; set; }
|
||||||
public string? PolicyUri { get; set; }
|
public string? PolicyUri { get; set; }
|
||||||
|
@@ -6,6 +6,7 @@ using DysonNetwork.Pass.Auth.OidcProvider.Models;
|
|||||||
using DysonNetwork.Pass.Auth.OidcProvider.Options;
|
using DysonNetwork.Pass.Auth.OidcProvider.Options;
|
||||||
using DysonNetwork.Pass.Auth.OidcProvider.Responses;
|
using DysonNetwork.Pass.Auth.OidcProvider.Responses;
|
||||||
using DysonNetwork.Shared.Cache;
|
using DysonNetwork.Shared.Cache;
|
||||||
|
using DysonNetwork.Shared.Models;
|
||||||
using DysonNetwork.Shared.Proto;
|
using DysonNetwork.Shared.Proto;
|
||||||
using Microsoft.EntityFrameworkCore;
|
using Microsoft.EntityFrameworkCore;
|
||||||
using Microsoft.Extensions.Options;
|
using Microsoft.Extensions.Options;
|
||||||
|
@@ -1,5 +1,6 @@
|
|||||||
using DysonNetwork.Pass.Account;
|
using DysonNetwork.Pass.Account;
|
||||||
using DysonNetwork.Shared.Cache;
|
using DysonNetwork.Shared.Cache;
|
||||||
|
using DysonNetwork.Shared.Models;
|
||||||
using Microsoft.AspNetCore.Mvc;
|
using Microsoft.AspNetCore.Mvc;
|
||||||
using Microsoft.EntityFrameworkCore;
|
using Microsoft.EntityFrameworkCore;
|
||||||
using Microsoft.IdentityModel.Tokens;
|
using Microsoft.IdentityModel.Tokens;
|
||||||
@@ -68,7 +69,7 @@ public class OidcController(
|
|||||||
/// Handles Apple authentication directly from mobile apps
|
/// Handles Apple authentication directly from mobile apps
|
||||||
/// </summary>
|
/// </summary>
|
||||||
[HttpPost("apple/mobile")]
|
[HttpPost("apple/mobile")]
|
||||||
public async Task<ActionResult<AuthChallenge>> AppleMobileLogin(
|
public async Task<ActionResult<SnAuthChallenge>> AppleMobileLogin(
|
||||||
[FromBody] AppleMobileSignInRequest request
|
[FromBody] AppleMobileSignInRequest request
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
|
@@ -2,6 +2,7 @@ using System.IdentityModel.Tokens.Jwt;
|
|||||||
using System.Text.Json.Serialization;
|
using System.Text.Json.Serialization;
|
||||||
using DysonNetwork.Pass.Account;
|
using DysonNetwork.Pass.Account;
|
||||||
using DysonNetwork.Shared.Cache;
|
using DysonNetwork.Shared.Cache;
|
||||||
|
using DysonNetwork.Shared.Models;
|
||||||
using Microsoft.EntityFrameworkCore;
|
using Microsoft.EntityFrameworkCore;
|
||||||
using Microsoft.IdentityModel.Tokens;
|
using Microsoft.IdentityModel.Tokens;
|
||||||
using NodaTime;
|
using NodaTime;
|
||||||
@@ -187,7 +188,7 @@ public abstract class OidcService(
|
|||||||
/// Creates a challenge and session for an authenticated user
|
/// Creates a challenge and session for an authenticated user
|
||||||
/// Also creates or updates the account connection
|
/// Also creates or updates the account connection
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public async Task<AuthChallenge> CreateChallengeForUserAsync(
|
public async Task<SnAuthChallenge> CreateChallengeForUserAsync(
|
||||||
OidcUserInfo userInfo,
|
OidcUserInfo userInfo,
|
||||||
Account.Account account,
|
Account.Account account,
|
||||||
HttpContext request,
|
HttpContext request,
|
||||||
@@ -219,7 +220,7 @@ public abstract class OidcService(
|
|||||||
// Create a challenge that's already completed
|
// Create a challenge that's already completed
|
||||||
var now = SystemClock.Instance.GetCurrentInstant();
|
var now = SystemClock.Instance.GetCurrentInstant();
|
||||||
var device = await auth.GetOrCreateDeviceAsync(account.Id, deviceId, deviceName, ClientPlatform.Ios);
|
var device = await auth.GetOrCreateDeviceAsync(account.Id, deviceId, deviceName, ClientPlatform.Ios);
|
||||||
var challenge = new AuthChallenge
|
var challenge = new SnAuthChallenge
|
||||||
{
|
{
|
||||||
ExpiredAt = now.Plus(Duration.FromHours(1)),
|
ExpiredAt = now.Plus(Duration.FromHours(1)),
|
||||||
StepTotal = await auth.DetectChallengeRisk(request.Request, account),
|
StepTotal = await auth.DetectChallengeRisk(request.Request, account),
|
||||||
|
@@ -3,6 +3,7 @@ using System.Security.Cryptography;
|
|||||||
using System.Text;
|
using System.Text;
|
||||||
using DysonNetwork.Pass.Wallet;
|
using DysonNetwork.Pass.Wallet;
|
||||||
using DysonNetwork.Shared.Cache;
|
using DysonNetwork.Shared.Cache;
|
||||||
|
using DysonNetwork.Shared.Models;
|
||||||
using Microsoft.EntityFrameworkCore;
|
using Microsoft.EntityFrameworkCore;
|
||||||
using NodaTime;
|
using NodaTime;
|
||||||
|
|
||||||
@@ -25,7 +26,7 @@ public class TokenAuthService(
|
|||||||
/// <param name="token">Incoming token string</param>
|
/// <param name="token">Incoming token string</param>
|
||||||
/// <param name="ipAddress">Client IP address, for logging purposes</param>
|
/// <param name="ipAddress">Client IP address, for logging purposes</param>
|
||||||
/// <returns>(Valid, Session, Message)</returns>
|
/// <returns>(Valid, Session, Message)</returns>
|
||||||
public async Task<(bool Valid, AuthSession? Session, string? Message)> AuthenticateTokenAsync(string token, string? ipAddress = null)
|
public async Task<(bool Valid, SnAuthSession? Session, string? Message)> AuthenticateTokenAsync(string token, string? ipAddress = null)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
@@ -63,7 +64,7 @@ public class TokenAuthService(
|
|||||||
|
|
||||||
// Try cache first
|
// Try cache first
|
||||||
var cacheKey = $"{AuthCacheConstants.Prefix}{sessionId}";
|
var cacheKey = $"{AuthCacheConstants.Prefix}{sessionId}";
|
||||||
var session = await cache.GetAsync<AuthSession>(cacheKey);
|
var session = await cache.GetAsync<SnAuthSession>(cacheKey);
|
||||||
if (session is not null)
|
if (session is not null)
|
||||||
{
|
{
|
||||||
logger.LogDebug("AuthenticateTokenAsync: cache hit for {CacheKey}", cacheKey);
|
logger.LogDebug("AuthenticateTokenAsync: cache hit for {CacheKey}", cacheKey);
|
||||||
|
@@ -1,4 +1,5 @@
|
|||||||
using DysonNetwork.Shared.Cache;
|
using DysonNetwork.Shared.Cache;
|
||||||
|
using DysonNetwork.Shared.Models;
|
||||||
using Microsoft.EntityFrameworkCore;
|
using Microsoft.EntityFrameworkCore;
|
||||||
|
|
||||||
namespace DysonNetwork.Pass.Credit;
|
namespace DysonNetwork.Pass.Credit;
|
||||||
|
@@ -1,4 +1,5 @@
|
|||||||
using DysonNetwork.Shared.Cache;
|
using DysonNetwork.Shared.Cache;
|
||||||
|
using DysonNetwork.Shared.Models;
|
||||||
using Microsoft.EntityFrameworkCore;
|
using Microsoft.EntityFrameworkCore;
|
||||||
using NodaTime;
|
using NodaTime;
|
||||||
using Quartz;
|
using Quartz;
|
||||||
@@ -7,7 +8,7 @@ namespace DysonNetwork.Pass.Handlers;
|
|||||||
|
|
||||||
public class LastActiveInfo
|
public class LastActiveInfo
|
||||||
{
|
{
|
||||||
public Auth.AuthSession Session { get; set; } = null!;
|
public SnAuthSession Session { get; set; } = null!;
|
||||||
public Account.Account Account { get; set; } = null!;
|
public Account.Account Account { get; set; } = null!;
|
||||||
public Instant SeenAt { get; set; }
|
public Instant SeenAt { get; set; }
|
||||||
}
|
}
|
||||||
|
@@ -1,5 +1,6 @@
|
|||||||
using DysonNetwork.Pass.Wallet;
|
using DysonNetwork.Pass.Wallet;
|
||||||
using DysonNetwork.Shared.Cache;
|
using DysonNetwork.Shared.Cache;
|
||||||
|
using DysonNetwork.Shared.Models;
|
||||||
using Microsoft.EntityFrameworkCore;
|
using Microsoft.EntityFrameworkCore;
|
||||||
|
|
||||||
namespace DysonNetwork.Pass.Leveling;
|
namespace DysonNetwork.Pass.Leveling;
|
||||||
|
@@ -4,8 +4,7 @@ using System.Collections.Generic;
|
|||||||
using System.Text.Json;
|
using System.Text.Json;
|
||||||
using DysonNetwork.Pass;
|
using DysonNetwork.Pass;
|
||||||
using DysonNetwork.Pass.Account;
|
using DysonNetwork.Pass.Account;
|
||||||
using DysonNetwork.Pass.Wallet;
|
using DysonNetwork.Shared.Models;
|
||||||
using DysonNetwork.Shared.Data;
|
|
||||||
using Microsoft.EntityFrameworkCore;
|
using Microsoft.EntityFrameworkCore;
|
||||||
using Microsoft.EntityFrameworkCore.Infrastructure;
|
using Microsoft.EntityFrameworkCore.Infrastructure;
|
||||||
using Microsoft.EntityFrameworkCore.Migrations;
|
using Microsoft.EntityFrameworkCore.Migrations;
|
||||||
@@ -390,7 +389,7 @@ namespace DysonNetwork.Pass.Migrations
|
|||||||
.HasColumnType("jsonb")
|
.HasColumnType("jsonb")
|
||||||
.HasColumnName("active_badge");
|
.HasColumnName("active_badge");
|
||||||
|
|
||||||
b.Property<CloudFileReferenceObject>("Background")
|
b.Property<SnCloudFileReferenceObject>("Background")
|
||||||
.HasColumnType("jsonb")
|
.HasColumnType("jsonb")
|
||||||
.HasColumnName("background");
|
.HasColumnName("background");
|
||||||
|
|
||||||
@@ -449,7 +448,7 @@ namespace DysonNetwork.Pass.Migrations
|
|||||||
.HasColumnType("character varying(256)")
|
.HasColumnType("character varying(256)")
|
||||||
.HasColumnName("middle_name");
|
.HasColumnName("middle_name");
|
||||||
|
|
||||||
b.Property<CloudFileReferenceObject>("Picture")
|
b.Property<SnCloudFileReferenceObject>("Picture")
|
||||||
.HasColumnType("jsonb")
|
.HasColumnType("jsonb")
|
||||||
.HasColumnName("picture");
|
.HasColumnName("picture");
|
||||||
|
|
||||||
@@ -472,7 +471,7 @@ namespace DysonNetwork.Pass.Migrations
|
|||||||
.HasColumnType("timestamp with time zone")
|
.HasColumnType("timestamp with time zone")
|
||||||
.HasColumnName("updated_at");
|
.HasColumnName("updated_at");
|
||||||
|
|
||||||
b.Property<VerificationMark>("Verification")
|
b.Property<SnVerificationMark>("Verification")
|
||||||
.HasColumnType("jsonb")
|
.HasColumnType("jsonb")
|
||||||
.HasColumnName("verification");
|
.HasColumnName("verification");
|
||||||
|
|
||||||
@@ -1029,7 +1028,7 @@ namespace DysonNetwork.Pass.Migrations
|
|||||||
.HasColumnType("uuid")
|
.HasColumnType("uuid")
|
||||||
.HasColumnName("id");
|
.HasColumnName("id");
|
||||||
|
|
||||||
b.Property<CloudFileReferenceObject>("Background")
|
b.Property<SnCloudFileReferenceObject>("Background")
|
||||||
.HasColumnType("jsonb")
|
.HasColumnType("jsonb")
|
||||||
.HasColumnName("background");
|
.HasColumnName("background");
|
||||||
|
|
||||||
@@ -1052,7 +1051,7 @@ namespace DysonNetwork.Pass.Migrations
|
|||||||
.HasColumnType("character varying(1024)")
|
.HasColumnType("character varying(1024)")
|
||||||
.HasColumnName("name");
|
.HasColumnName("name");
|
||||||
|
|
||||||
b.Property<CloudFileReferenceObject>("Picture")
|
b.Property<SnCloudFileReferenceObject>("Picture")
|
||||||
.HasColumnType("jsonb")
|
.HasColumnType("jsonb")
|
||||||
.HasColumnName("picture");
|
.HasColumnName("picture");
|
||||||
|
|
||||||
@@ -1070,7 +1069,7 @@ namespace DysonNetwork.Pass.Migrations
|
|||||||
.HasColumnType("timestamp with time zone")
|
.HasColumnType("timestamp with time zone")
|
||||||
.HasColumnName("updated_at");
|
.HasColumnName("updated_at");
|
||||||
|
|
||||||
b.Property<VerificationMark>("Verification")
|
b.Property<SnVerificationMark>("Verification")
|
||||||
.HasColumnType("jsonb")
|
.HasColumnType("jsonb")
|
||||||
.HasColumnName("verification");
|
.HasColumnName("verification");
|
||||||
|
|
||||||
|
@@ -2,8 +2,7 @@
|
|||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Text.Json;
|
using System.Text.Json;
|
||||||
using DysonNetwork.Pass.Account;
|
using DysonNetwork.Pass.Account;
|
||||||
using DysonNetwork.Pass.Wallet;
|
using DysonNetwork.Shared.Models;
|
||||||
using DysonNetwork.Shared.Data;
|
|
||||||
using Microsoft.EntityFrameworkCore.Migrations;
|
using Microsoft.EntityFrameworkCore.Migrations;
|
||||||
using NetTopologySuite.Geometries;
|
using NetTopologySuite.Geometries;
|
||||||
using NodaTime;
|
using NodaTime;
|
||||||
@@ -49,9 +48,9 @@ namespace DysonNetwork.Pass.Migrations
|
|||||||
name = table.Column<string>(type: "character varying(1024)", maxLength: 1024, nullable: false),
|
name = table.Column<string>(type: "character varying(1024)", maxLength: 1024, nullable: false),
|
||||||
description = table.Column<string>(type: "character varying(4096)", maxLength: 4096, nullable: true),
|
description = table.Column<string>(type: "character varying(4096)", maxLength: 4096, nullable: true),
|
||||||
status = table.Column<int>(type: "integer", nullable: false),
|
status = table.Column<int>(type: "integer", nullable: false),
|
||||||
picture = table.Column<CloudFileReferenceObject>(type: "jsonb", nullable: true),
|
picture = table.Column<SnCloudFileReferenceObject>(type: "jsonb", nullable: true),
|
||||||
background = table.Column<CloudFileReferenceObject>(type: "jsonb", nullable: true),
|
background = table.Column<SnCloudFileReferenceObject>(type: "jsonb", nullable: true),
|
||||||
verification = table.Column<VerificationMark>(type: "jsonb", nullable: true),
|
verification = table.Column<SnVerificationMark>(type: "jsonb", nullable: true),
|
||||||
created_at = table.Column<Instant>(type: "timestamp with time zone", nullable: false),
|
created_at = table.Column<Instant>(type: "timestamp with time zone", nullable: false),
|
||||||
updated_at = table.Column<Instant>(type: "timestamp with time zone", nullable: false),
|
updated_at = table.Column<Instant>(type: "timestamp with time zone", nullable: false),
|
||||||
deleted_at = table.Column<Instant>(type: "timestamp with time zone", nullable: true)
|
deleted_at = table.Column<Instant>(type: "timestamp with time zone", nullable: true)
|
||||||
@@ -242,13 +241,13 @@ namespace DysonNetwork.Pass.Migrations
|
|||||||
location = table.Column<string>(type: "character varying(1024)", maxLength: 1024, nullable: true),
|
location = table.Column<string>(type: "character varying(1024)", maxLength: 1024, nullable: true),
|
||||||
birthday = table.Column<Instant>(type: "timestamp with time zone", nullable: true),
|
birthday = table.Column<Instant>(type: "timestamp with time zone", nullable: true),
|
||||||
last_seen_at = table.Column<Instant>(type: "timestamp with time zone", nullable: true),
|
last_seen_at = table.Column<Instant>(type: "timestamp with time zone", nullable: true),
|
||||||
verification = table.Column<VerificationMark>(type: "jsonb", nullable: true),
|
verification = table.Column<SnVerificationMark>(type: "jsonb", nullable: true),
|
||||||
active_badge = table.Column<BadgeReferenceObject>(type: "jsonb", nullable: true),
|
active_badge = table.Column<BadgeReferenceObject>(type: "jsonb", nullable: true),
|
||||||
experience = table.Column<int>(type: "integer", nullable: false),
|
experience = table.Column<int>(type: "integer", nullable: false),
|
||||||
picture_id = table.Column<string>(type: "character varying(32)", maxLength: 32, nullable: true),
|
picture_id = table.Column<string>(type: "character varying(32)", maxLength: 32, nullable: true),
|
||||||
background_id = table.Column<string>(type: "character varying(32)", maxLength: 32, nullable: true),
|
background_id = table.Column<string>(type: "character varying(32)", maxLength: 32, nullable: true),
|
||||||
picture = table.Column<CloudFileReferenceObject>(type: "jsonb", nullable: true),
|
picture = table.Column<SnCloudFileReferenceObject>(type: "jsonb", nullable: true),
|
||||||
background = table.Column<CloudFileReferenceObject>(type: "jsonb", nullable: true),
|
background = table.Column<SnCloudFileReferenceObject>(type: "jsonb", nullable: true),
|
||||||
account_id = table.Column<Guid>(type: "uuid", nullable: false),
|
account_id = table.Column<Guid>(type: "uuid", nullable: false),
|
||||||
created_at = table.Column<Instant>(type: "timestamp with time zone", nullable: false),
|
created_at = table.Column<Instant>(type: "timestamp with time zone", nullable: false),
|
||||||
updated_at = table.Column<Instant>(type: "timestamp with time zone", nullable: false),
|
updated_at = table.Column<Instant>(type: "timestamp with time zone", nullable: false),
|
||||||
|
@@ -4,8 +4,7 @@ using System.Collections.Generic;
|
|||||||
using System.Text.Json;
|
using System.Text.Json;
|
||||||
using DysonNetwork.Pass;
|
using DysonNetwork.Pass;
|
||||||
using DysonNetwork.Pass.Account;
|
using DysonNetwork.Pass.Account;
|
||||||
using DysonNetwork.Pass.Wallet;
|
using DysonNetwork.Shared.Models;
|
||||||
using DysonNetwork.Shared.Data;
|
|
||||||
using Microsoft.EntityFrameworkCore;
|
using Microsoft.EntityFrameworkCore;
|
||||||
using Microsoft.EntityFrameworkCore.Infrastructure;
|
using Microsoft.EntityFrameworkCore.Infrastructure;
|
||||||
using Microsoft.EntityFrameworkCore.Migrations;
|
using Microsoft.EntityFrameworkCore.Migrations;
|
||||||
@@ -390,7 +389,7 @@ namespace DysonNetwork.Pass.Migrations
|
|||||||
.HasColumnType("jsonb")
|
.HasColumnType("jsonb")
|
||||||
.HasColumnName("active_badge");
|
.HasColumnName("active_badge");
|
||||||
|
|
||||||
b.Property<CloudFileReferenceObject>("Background")
|
b.Property<SnCloudFileReferenceObject>("Background")
|
||||||
.HasColumnType("jsonb")
|
.HasColumnType("jsonb")
|
||||||
.HasColumnName("background");
|
.HasColumnName("background");
|
||||||
|
|
||||||
@@ -444,7 +443,7 @@ namespace DysonNetwork.Pass.Migrations
|
|||||||
.HasColumnType("character varying(256)")
|
.HasColumnType("character varying(256)")
|
||||||
.HasColumnName("middle_name");
|
.HasColumnName("middle_name");
|
||||||
|
|
||||||
b.Property<CloudFileReferenceObject>("Picture")
|
b.Property<SnCloudFileReferenceObject>("Picture")
|
||||||
.HasColumnType("jsonb")
|
.HasColumnType("jsonb")
|
||||||
.HasColumnName("picture");
|
.HasColumnName("picture");
|
||||||
|
|
||||||
@@ -462,7 +461,7 @@ namespace DysonNetwork.Pass.Migrations
|
|||||||
.HasColumnType("timestamp with time zone")
|
.HasColumnType("timestamp with time zone")
|
||||||
.HasColumnName("updated_at");
|
.HasColumnName("updated_at");
|
||||||
|
|
||||||
b.Property<VerificationMark>("Verification")
|
b.Property<SnVerificationMark>("Verification")
|
||||||
.HasColumnType("jsonb")
|
.HasColumnType("jsonb")
|
||||||
.HasColumnName("verification");
|
.HasColumnName("verification");
|
||||||
|
|
||||||
@@ -1019,7 +1018,7 @@ namespace DysonNetwork.Pass.Migrations
|
|||||||
.HasColumnType("uuid")
|
.HasColumnType("uuid")
|
||||||
.HasColumnName("id");
|
.HasColumnName("id");
|
||||||
|
|
||||||
b.Property<CloudFileReferenceObject>("Background")
|
b.Property<SnCloudFileReferenceObject>("Background")
|
||||||
.HasColumnType("jsonb")
|
.HasColumnType("jsonb")
|
||||||
.HasColumnName("background");
|
.HasColumnName("background");
|
||||||
|
|
||||||
@@ -1042,7 +1041,7 @@ namespace DysonNetwork.Pass.Migrations
|
|||||||
.HasColumnType("character varying(1024)")
|
.HasColumnType("character varying(1024)")
|
||||||
.HasColumnName("name");
|
.HasColumnName("name");
|
||||||
|
|
||||||
b.Property<CloudFileReferenceObject>("Picture")
|
b.Property<SnCloudFileReferenceObject>("Picture")
|
||||||
.HasColumnType("jsonb")
|
.HasColumnType("jsonb")
|
||||||
.HasColumnName("picture");
|
.HasColumnName("picture");
|
||||||
|
|
||||||
@@ -1060,7 +1059,7 @@ namespace DysonNetwork.Pass.Migrations
|
|||||||
.HasColumnType("timestamp with time zone")
|
.HasColumnType("timestamp with time zone")
|
||||||
.HasColumnName("updated_at");
|
.HasColumnName("updated_at");
|
||||||
|
|
||||||
b.Property<VerificationMark>("Verification")
|
b.Property<SnVerificationMark>("Verification")
|
||||||
.HasColumnType("jsonb")
|
.HasColumnType("jsonb")
|
||||||
.HasColumnName("verification");
|
.HasColumnName("verification");
|
||||||
|
|
||||||
|
@@ -4,8 +4,7 @@ using System.Collections.Generic;
|
|||||||
using System.Text.Json;
|
using System.Text.Json;
|
||||||
using DysonNetwork.Pass;
|
using DysonNetwork.Pass;
|
||||||
using DysonNetwork.Pass.Account;
|
using DysonNetwork.Pass.Account;
|
||||||
using DysonNetwork.Pass.Wallet;
|
using DysonNetwork.Shared.Models;
|
||||||
using DysonNetwork.Shared.Data;
|
|
||||||
using Microsoft.EntityFrameworkCore;
|
using Microsoft.EntityFrameworkCore;
|
||||||
using Microsoft.EntityFrameworkCore.Infrastructure;
|
using Microsoft.EntityFrameworkCore.Infrastructure;
|
||||||
using Microsoft.EntityFrameworkCore.Migrations;
|
using Microsoft.EntityFrameworkCore.Migrations;
|
||||||
@@ -390,7 +389,7 @@ namespace DysonNetwork.Pass.Migrations
|
|||||||
.HasColumnType("jsonb")
|
.HasColumnType("jsonb")
|
||||||
.HasColumnName("active_badge");
|
.HasColumnName("active_badge");
|
||||||
|
|
||||||
b.Property<CloudFileReferenceObject>("Background")
|
b.Property<SnCloudFileReferenceObject>("Background")
|
||||||
.HasColumnType("jsonb")
|
.HasColumnType("jsonb")
|
||||||
.HasColumnName("background");
|
.HasColumnName("background");
|
||||||
|
|
||||||
@@ -444,7 +443,7 @@ namespace DysonNetwork.Pass.Migrations
|
|||||||
.HasColumnType("character varying(256)")
|
.HasColumnType("character varying(256)")
|
||||||
.HasColumnName("middle_name");
|
.HasColumnName("middle_name");
|
||||||
|
|
||||||
b.Property<CloudFileReferenceObject>("Picture")
|
b.Property<SnCloudFileReferenceObject>("Picture")
|
||||||
.HasColumnType("jsonb")
|
.HasColumnType("jsonb")
|
||||||
.HasColumnName("picture");
|
.HasColumnName("picture");
|
||||||
|
|
||||||
@@ -462,7 +461,7 @@ namespace DysonNetwork.Pass.Migrations
|
|||||||
.HasColumnType("timestamp with time zone")
|
.HasColumnType("timestamp with time zone")
|
||||||
.HasColumnName("updated_at");
|
.HasColumnName("updated_at");
|
||||||
|
|
||||||
b.Property<VerificationMark>("Verification")
|
b.Property<SnVerificationMark>("Verification")
|
||||||
.HasColumnType("jsonb")
|
.HasColumnType("jsonb")
|
||||||
.HasColumnName("verification");
|
.HasColumnName("verification");
|
||||||
|
|
||||||
@@ -898,7 +897,7 @@ namespace DysonNetwork.Pass.Migrations
|
|||||||
.HasColumnType("uuid")
|
.HasColumnType("uuid")
|
||||||
.HasColumnName("id");
|
.HasColumnName("id");
|
||||||
|
|
||||||
b.Property<CloudFileReferenceObject>("Background")
|
b.Property<SnCloudFileReferenceObject>("Background")
|
||||||
.HasColumnType("jsonb")
|
.HasColumnType("jsonb")
|
||||||
.HasColumnName("background");
|
.HasColumnName("background");
|
||||||
|
|
||||||
@@ -921,7 +920,7 @@ namespace DysonNetwork.Pass.Migrations
|
|||||||
.HasColumnType("character varying(1024)")
|
.HasColumnType("character varying(1024)")
|
||||||
.HasColumnName("name");
|
.HasColumnName("name");
|
||||||
|
|
||||||
b.Property<CloudFileReferenceObject>("Picture")
|
b.Property<SnCloudFileReferenceObject>("Picture")
|
||||||
.HasColumnType("jsonb")
|
.HasColumnType("jsonb")
|
||||||
.HasColumnName("picture");
|
.HasColumnName("picture");
|
||||||
|
|
||||||
@@ -939,7 +938,7 @@ namespace DysonNetwork.Pass.Migrations
|
|||||||
.HasColumnType("timestamp with time zone")
|
.HasColumnType("timestamp with time zone")
|
||||||
.HasColumnName("updated_at");
|
.HasColumnName("updated_at");
|
||||||
|
|
||||||
b.Property<VerificationMark>("Verification")
|
b.Property<SnVerificationMark>("Verification")
|
||||||
.HasColumnType("jsonb")
|
.HasColumnType("jsonb")
|
||||||
.HasColumnName("verification");
|
.HasColumnName("verification");
|
||||||
|
|
||||||
|
@@ -4,8 +4,7 @@ using System.Collections.Generic;
|
|||||||
using System.Text.Json;
|
using System.Text.Json;
|
||||||
using DysonNetwork.Pass;
|
using DysonNetwork.Pass;
|
||||||
using DysonNetwork.Pass.Account;
|
using DysonNetwork.Pass.Account;
|
||||||
using DysonNetwork.Pass.Wallet;
|
using DysonNetwork.Shared.Models;
|
||||||
using DysonNetwork.Shared.Data;
|
|
||||||
using Microsoft.EntityFrameworkCore;
|
using Microsoft.EntityFrameworkCore;
|
||||||
using Microsoft.EntityFrameworkCore.Infrastructure;
|
using Microsoft.EntityFrameworkCore.Infrastructure;
|
||||||
using Microsoft.EntityFrameworkCore.Migrations;
|
using Microsoft.EntityFrameworkCore.Migrations;
|
||||||
@@ -390,7 +389,7 @@ namespace DysonNetwork.Pass.Migrations
|
|||||||
.HasColumnType("jsonb")
|
.HasColumnType("jsonb")
|
||||||
.HasColumnName("active_badge");
|
.HasColumnName("active_badge");
|
||||||
|
|
||||||
b.Property<CloudFileReferenceObject>("Background")
|
b.Property<SnCloudFileReferenceObject>("Background")
|
||||||
.HasColumnType("jsonb")
|
.HasColumnType("jsonb")
|
||||||
.HasColumnName("background");
|
.HasColumnName("background");
|
||||||
|
|
||||||
@@ -444,7 +443,7 @@ namespace DysonNetwork.Pass.Migrations
|
|||||||
.HasColumnType("character varying(256)")
|
.HasColumnType("character varying(256)")
|
||||||
.HasColumnName("middle_name");
|
.HasColumnName("middle_name");
|
||||||
|
|
||||||
b.Property<CloudFileReferenceObject>("Picture")
|
b.Property<SnCloudFileReferenceObject>("Picture")
|
||||||
.HasColumnType("jsonb")
|
.HasColumnType("jsonb")
|
||||||
.HasColumnName("picture");
|
.HasColumnName("picture");
|
||||||
|
|
||||||
@@ -462,7 +461,7 @@ namespace DysonNetwork.Pass.Migrations
|
|||||||
.HasColumnType("timestamp with time zone")
|
.HasColumnType("timestamp with time zone")
|
||||||
.HasColumnName("updated_at");
|
.HasColumnName("updated_at");
|
||||||
|
|
||||||
b.Property<VerificationMark>("Verification")
|
b.Property<SnVerificationMark>("Verification")
|
||||||
.HasColumnType("jsonb")
|
.HasColumnType("jsonb")
|
||||||
.HasColumnName("verification");
|
.HasColumnName("verification");
|
||||||
|
|
||||||
@@ -902,7 +901,7 @@ namespace DysonNetwork.Pass.Migrations
|
|||||||
.HasColumnType("uuid")
|
.HasColumnType("uuid")
|
||||||
.HasColumnName("id");
|
.HasColumnName("id");
|
||||||
|
|
||||||
b.Property<CloudFileReferenceObject>("Background")
|
b.Property<SnCloudFileReferenceObject>("Background")
|
||||||
.HasColumnType("jsonb")
|
.HasColumnType("jsonb")
|
||||||
.HasColumnName("background");
|
.HasColumnName("background");
|
||||||
|
|
||||||
@@ -925,7 +924,7 @@ namespace DysonNetwork.Pass.Migrations
|
|||||||
.HasColumnType("character varying(1024)")
|
.HasColumnType("character varying(1024)")
|
||||||
.HasColumnName("name");
|
.HasColumnName("name");
|
||||||
|
|
||||||
b.Property<CloudFileReferenceObject>("Picture")
|
b.Property<SnCloudFileReferenceObject>("Picture")
|
||||||
.HasColumnType("jsonb")
|
.HasColumnType("jsonb")
|
||||||
.HasColumnName("picture");
|
.HasColumnName("picture");
|
||||||
|
|
||||||
@@ -943,7 +942,7 @@ namespace DysonNetwork.Pass.Migrations
|
|||||||
.HasColumnType("timestamp with time zone")
|
.HasColumnType("timestamp with time zone")
|
||||||
.HasColumnName("updated_at");
|
.HasColumnName("updated_at");
|
||||||
|
|
||||||
b.Property<VerificationMark>("Verification")
|
b.Property<SnVerificationMark>("Verification")
|
||||||
.HasColumnType("jsonb")
|
.HasColumnType("jsonb")
|
||||||
.HasColumnName("verification");
|
.HasColumnName("verification");
|
||||||
|
|
||||||
|
@@ -4,8 +4,7 @@ using System.Collections.Generic;
|
|||||||
using System.Text.Json;
|
using System.Text.Json;
|
||||||
using DysonNetwork.Pass;
|
using DysonNetwork.Pass;
|
||||||
using DysonNetwork.Pass.Account;
|
using DysonNetwork.Pass.Account;
|
||||||
using DysonNetwork.Pass.Wallet;
|
using DysonNetwork.Shared.Models;
|
||||||
using DysonNetwork.Shared.Data;
|
|
||||||
using Microsoft.EntityFrameworkCore;
|
using Microsoft.EntityFrameworkCore;
|
||||||
using Microsoft.EntityFrameworkCore.Infrastructure;
|
using Microsoft.EntityFrameworkCore.Infrastructure;
|
||||||
using Microsoft.EntityFrameworkCore.Migrations;
|
using Microsoft.EntityFrameworkCore.Migrations;
|
||||||
@@ -390,7 +389,7 @@ namespace DysonNetwork.Pass.Migrations
|
|||||||
.HasColumnType("jsonb")
|
.HasColumnType("jsonb")
|
||||||
.HasColumnName("active_badge");
|
.HasColumnName("active_badge");
|
||||||
|
|
||||||
b.Property<CloudFileReferenceObject>("Background")
|
b.Property<SnCloudFileReferenceObject>("Background")
|
||||||
.HasColumnType("jsonb")
|
.HasColumnType("jsonb")
|
||||||
.HasColumnName("background");
|
.HasColumnName("background");
|
||||||
|
|
||||||
@@ -444,7 +443,7 @@ namespace DysonNetwork.Pass.Migrations
|
|||||||
.HasColumnType("character varying(256)")
|
.HasColumnType("character varying(256)")
|
||||||
.HasColumnName("middle_name");
|
.HasColumnName("middle_name");
|
||||||
|
|
||||||
b.Property<CloudFileReferenceObject>("Picture")
|
b.Property<SnCloudFileReferenceObject>("Picture")
|
||||||
.HasColumnType("jsonb")
|
.HasColumnType("jsonb")
|
||||||
.HasColumnName("picture");
|
.HasColumnName("picture");
|
||||||
|
|
||||||
@@ -462,7 +461,7 @@ namespace DysonNetwork.Pass.Migrations
|
|||||||
.HasColumnType("timestamp with time zone")
|
.HasColumnType("timestamp with time zone")
|
||||||
.HasColumnName("updated_at");
|
.HasColumnName("updated_at");
|
||||||
|
|
||||||
b.Property<VerificationMark>("Verification")
|
b.Property<SnVerificationMark>("Verification")
|
||||||
.HasColumnType("jsonb")
|
.HasColumnType("jsonb")
|
||||||
.HasColumnName("verification");
|
.HasColumnName("verification");
|
||||||
|
|
||||||
|
@@ -1,6 +1,6 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using DysonNetwork.Shared.Data;
|
using DysonNetwork.Shared.Models;
|
||||||
using Microsoft.EntityFrameworkCore.Migrations;
|
using Microsoft.EntityFrameworkCore.Migrations;
|
||||||
using NodaTime;
|
using NodaTime;
|
||||||
|
|
||||||
@@ -70,16 +70,16 @@ namespace DysonNetwork.Pass.Migrations
|
|||||||
columns: table => new
|
columns: table => new
|
||||||
{
|
{
|
||||||
id = table.Column<Guid>(type: "uuid", nullable: false),
|
id = table.Column<Guid>(type: "uuid", nullable: false),
|
||||||
background = table.Column<CloudFileReferenceObject>(type: "jsonb", nullable: true),
|
background = table.Column<SnCloudFileReferenceObject>(type: "jsonb", nullable: true),
|
||||||
created_at = table.Column<Instant>(type: "timestamp with time zone", nullable: false),
|
created_at = table.Column<Instant>(type: "timestamp with time zone", nullable: false),
|
||||||
deleted_at = table.Column<Instant>(type: "timestamp with time zone", nullable: true),
|
deleted_at = table.Column<Instant>(type: "timestamp with time zone", nullable: true),
|
||||||
description = table.Column<string>(type: "character varying(4096)", maxLength: 4096, nullable: true),
|
description = table.Column<string>(type: "character varying(4096)", maxLength: 4096, nullable: true),
|
||||||
name = table.Column<string>(type: "character varying(1024)", maxLength: 1024, nullable: false),
|
name = table.Column<string>(type: "character varying(1024)", maxLength: 1024, nullable: false),
|
||||||
picture = table.Column<CloudFileReferenceObject>(type: "jsonb", nullable: true),
|
picture = table.Column<SnCloudFileReferenceObject>(type: "jsonb", nullable: true),
|
||||||
slug = table.Column<string>(type: "character varying(1024)", maxLength: 1024, nullable: false),
|
slug = table.Column<string>(type: "character varying(1024)", maxLength: 1024, nullable: false),
|
||||||
status = table.Column<int>(type: "integer", nullable: false),
|
status = table.Column<int>(type: "integer", nullable: false),
|
||||||
updated_at = table.Column<Instant>(type: "timestamp with time zone", nullable: false),
|
updated_at = table.Column<Instant>(type: "timestamp with time zone", nullable: false),
|
||||||
verification = table.Column<VerificationMark>(type: "jsonb", nullable: true)
|
verification = table.Column<SnVerificationMark>(type: "jsonb", nullable: true)
|
||||||
},
|
},
|
||||||
constraints: table =>
|
constraints: table =>
|
||||||
{
|
{
|
||||||
|
@@ -4,8 +4,7 @@ using System.Collections.Generic;
|
|||||||
using System.Text.Json;
|
using System.Text.Json;
|
||||||
using DysonNetwork.Pass;
|
using DysonNetwork.Pass;
|
||||||
using DysonNetwork.Pass.Account;
|
using DysonNetwork.Pass.Account;
|
||||||
using DysonNetwork.Pass.Wallet;
|
using DysonNetwork.Shared.Models;
|
||||||
using DysonNetwork.Shared.Data;
|
|
||||||
using Microsoft.EntityFrameworkCore;
|
using Microsoft.EntityFrameworkCore;
|
||||||
using Microsoft.EntityFrameworkCore.Infrastructure;
|
using Microsoft.EntityFrameworkCore.Infrastructure;
|
||||||
using Microsoft.EntityFrameworkCore.Migrations;
|
using Microsoft.EntityFrameworkCore.Migrations;
|
||||||
@@ -390,7 +389,7 @@ namespace DysonNetwork.Pass.Migrations
|
|||||||
.HasColumnType("jsonb")
|
.HasColumnType("jsonb")
|
||||||
.HasColumnName("active_badge");
|
.HasColumnName("active_badge");
|
||||||
|
|
||||||
b.Property<CloudFileReferenceObject>("Background")
|
b.Property<SnCloudFileReferenceObject>("Background")
|
||||||
.HasColumnType("jsonb")
|
.HasColumnType("jsonb")
|
||||||
.HasColumnName("background");
|
.HasColumnName("background");
|
||||||
|
|
||||||
@@ -448,7 +447,7 @@ namespace DysonNetwork.Pass.Migrations
|
|||||||
.HasColumnType("character varying(256)")
|
.HasColumnType("character varying(256)")
|
||||||
.HasColumnName("middle_name");
|
.HasColumnName("middle_name");
|
||||||
|
|
||||||
b.Property<CloudFileReferenceObject>("Picture")
|
b.Property<SnCloudFileReferenceObject>("Picture")
|
||||||
.HasColumnType("jsonb")
|
.HasColumnType("jsonb")
|
||||||
.HasColumnName("picture");
|
.HasColumnName("picture");
|
||||||
|
|
||||||
@@ -466,7 +465,7 @@ namespace DysonNetwork.Pass.Migrations
|
|||||||
.HasColumnType("timestamp with time zone")
|
.HasColumnType("timestamp with time zone")
|
||||||
.HasColumnName("updated_at");
|
.HasColumnName("updated_at");
|
||||||
|
|
||||||
b.Property<VerificationMark>("Verification")
|
b.Property<SnVerificationMark>("Verification")
|
||||||
.HasColumnType("jsonb")
|
.HasColumnType("jsonb")
|
||||||
.HasColumnName("verification");
|
.HasColumnName("verification");
|
||||||
|
|
||||||
|
@@ -4,8 +4,7 @@ using System.Collections.Generic;
|
|||||||
using System.Text.Json;
|
using System.Text.Json;
|
||||||
using DysonNetwork.Pass;
|
using DysonNetwork.Pass;
|
||||||
using DysonNetwork.Pass.Account;
|
using DysonNetwork.Pass.Account;
|
||||||
using DysonNetwork.Pass.Wallet;
|
using DysonNetwork.Shared.Models;
|
||||||
using DysonNetwork.Shared.Data;
|
|
||||||
using Microsoft.EntityFrameworkCore;
|
using Microsoft.EntityFrameworkCore;
|
||||||
using Microsoft.EntityFrameworkCore.Infrastructure;
|
using Microsoft.EntityFrameworkCore.Infrastructure;
|
||||||
using Microsoft.EntityFrameworkCore.Migrations;
|
using Microsoft.EntityFrameworkCore.Migrations;
|
||||||
@@ -394,7 +393,7 @@ namespace DysonNetwork.Pass.Migrations
|
|||||||
.HasColumnType("jsonb")
|
.HasColumnType("jsonb")
|
||||||
.HasColumnName("active_badge");
|
.HasColumnName("active_badge");
|
||||||
|
|
||||||
b.Property<CloudFileReferenceObject>("Background")
|
b.Property<SnCloudFileReferenceObject>("Background")
|
||||||
.HasColumnType("jsonb")
|
.HasColumnType("jsonb")
|
||||||
.HasColumnName("background");
|
.HasColumnName("background");
|
||||||
|
|
||||||
@@ -452,7 +451,7 @@ namespace DysonNetwork.Pass.Migrations
|
|||||||
.HasColumnType("character varying(256)")
|
.HasColumnType("character varying(256)")
|
||||||
.HasColumnName("middle_name");
|
.HasColumnName("middle_name");
|
||||||
|
|
||||||
b.Property<CloudFileReferenceObject>("Picture")
|
b.Property<SnCloudFileReferenceObject>("Picture")
|
||||||
.HasColumnType("jsonb")
|
.HasColumnType("jsonb")
|
||||||
.HasColumnName("picture");
|
.HasColumnName("picture");
|
||||||
|
|
||||||
@@ -470,7 +469,7 @@ namespace DysonNetwork.Pass.Migrations
|
|||||||
.HasColumnType("timestamp with time zone")
|
.HasColumnType("timestamp with time zone")
|
||||||
.HasColumnName("updated_at");
|
.HasColumnName("updated_at");
|
||||||
|
|
||||||
b.Property<VerificationMark>("Verification")
|
b.Property<SnVerificationMark>("Verification")
|
||||||
.HasColumnType("jsonb")
|
.HasColumnType("jsonb")
|
||||||
.HasColumnName("verification");
|
.HasColumnName("verification");
|
||||||
|
|
||||||
|
@@ -4,8 +4,7 @@ using System.Collections.Generic;
|
|||||||
using System.Text.Json;
|
using System.Text.Json;
|
||||||
using DysonNetwork.Pass;
|
using DysonNetwork.Pass;
|
||||||
using DysonNetwork.Pass.Account;
|
using DysonNetwork.Pass.Account;
|
||||||
using DysonNetwork.Pass.Wallet;
|
using DysonNetwork.Shared.Models;
|
||||||
using DysonNetwork.Shared.Data;
|
|
||||||
using Microsoft.EntityFrameworkCore;
|
using Microsoft.EntityFrameworkCore;
|
||||||
using Microsoft.EntityFrameworkCore.Infrastructure;
|
using Microsoft.EntityFrameworkCore.Infrastructure;
|
||||||
using Microsoft.EntityFrameworkCore.Migrations;
|
using Microsoft.EntityFrameworkCore.Migrations;
|
||||||
@@ -394,7 +393,7 @@ namespace DysonNetwork.Pass.Migrations
|
|||||||
.HasColumnType("jsonb")
|
.HasColumnType("jsonb")
|
||||||
.HasColumnName("active_badge");
|
.HasColumnName("active_badge");
|
||||||
|
|
||||||
b.Property<CloudFileReferenceObject>("Background")
|
b.Property<SnCloudFileReferenceObject>("Background")
|
||||||
.HasColumnType("jsonb")
|
.HasColumnType("jsonb")
|
||||||
.HasColumnName("background");
|
.HasColumnName("background");
|
||||||
|
|
||||||
@@ -452,7 +451,7 @@ namespace DysonNetwork.Pass.Migrations
|
|||||||
.HasColumnType("character varying(256)")
|
.HasColumnType("character varying(256)")
|
||||||
.HasColumnName("middle_name");
|
.HasColumnName("middle_name");
|
||||||
|
|
||||||
b.Property<CloudFileReferenceObject>("Picture")
|
b.Property<SnCloudFileReferenceObject>("Picture")
|
||||||
.HasColumnType("jsonb")
|
.HasColumnType("jsonb")
|
||||||
.HasColumnName("picture");
|
.HasColumnName("picture");
|
||||||
|
|
||||||
@@ -470,7 +469,7 @@ namespace DysonNetwork.Pass.Migrations
|
|||||||
.HasColumnType("timestamp with time zone")
|
.HasColumnType("timestamp with time zone")
|
||||||
.HasColumnName("updated_at");
|
.HasColumnName("updated_at");
|
||||||
|
|
||||||
b.Property<VerificationMark>("Verification")
|
b.Property<SnVerificationMark>("Verification")
|
||||||
.HasColumnType("jsonb")
|
.HasColumnType("jsonb")
|
||||||
.HasColumnName("verification");
|
.HasColumnName("verification");
|
||||||
|
|
||||||
|
@@ -4,8 +4,7 @@ using System.Collections.Generic;
|
|||||||
using System.Text.Json;
|
using System.Text.Json;
|
||||||
using DysonNetwork.Pass;
|
using DysonNetwork.Pass;
|
||||||
using DysonNetwork.Pass.Account;
|
using DysonNetwork.Pass.Account;
|
||||||
using DysonNetwork.Pass.Wallet;
|
using DysonNetwork.Shared.Models;
|
||||||
using DysonNetwork.Shared.Data;
|
|
||||||
using Microsoft.EntityFrameworkCore;
|
using Microsoft.EntityFrameworkCore;
|
||||||
using Microsoft.EntityFrameworkCore.Infrastructure;
|
using Microsoft.EntityFrameworkCore.Infrastructure;
|
||||||
using Microsoft.EntityFrameworkCore.Migrations;
|
using Microsoft.EntityFrameworkCore.Migrations;
|
||||||
@@ -394,7 +393,7 @@ namespace DysonNetwork.Pass.Migrations
|
|||||||
.HasColumnType("jsonb")
|
.HasColumnType("jsonb")
|
||||||
.HasColumnName("active_badge");
|
.HasColumnName("active_badge");
|
||||||
|
|
||||||
b.Property<CloudFileReferenceObject>("Background")
|
b.Property<SnCloudFileReferenceObject>("Background")
|
||||||
.HasColumnType("jsonb")
|
.HasColumnType("jsonb")
|
||||||
.HasColumnName("background");
|
.HasColumnName("background");
|
||||||
|
|
||||||
@@ -452,7 +451,7 @@ namespace DysonNetwork.Pass.Migrations
|
|||||||
.HasColumnType("character varying(256)")
|
.HasColumnType("character varying(256)")
|
||||||
.HasColumnName("middle_name");
|
.HasColumnName("middle_name");
|
||||||
|
|
||||||
b.Property<CloudFileReferenceObject>("Picture")
|
b.Property<SnCloudFileReferenceObject>("Picture")
|
||||||
.HasColumnType("jsonb")
|
.HasColumnType("jsonb")
|
||||||
.HasColumnName("picture");
|
.HasColumnName("picture");
|
||||||
|
|
||||||
@@ -470,7 +469,7 @@ namespace DysonNetwork.Pass.Migrations
|
|||||||
.HasColumnType("timestamp with time zone")
|
.HasColumnType("timestamp with time zone")
|
||||||
.HasColumnName("updated_at");
|
.HasColumnName("updated_at");
|
||||||
|
|
||||||
b.Property<VerificationMark>("Verification")
|
b.Property<SnVerificationMark>("Verification")
|
||||||
.HasColumnType("jsonb")
|
.HasColumnType("jsonb")
|
||||||
.HasColumnName("verification");
|
.HasColumnName("verification");
|
||||||
|
|
||||||
|
@@ -4,8 +4,7 @@ using System.Collections.Generic;
|
|||||||
using System.Text.Json;
|
using System.Text.Json;
|
||||||
using DysonNetwork.Pass;
|
using DysonNetwork.Pass;
|
||||||
using DysonNetwork.Pass.Account;
|
using DysonNetwork.Pass.Account;
|
||||||
using DysonNetwork.Pass.Wallet;
|
using DysonNetwork.Shared.Models;
|
||||||
using DysonNetwork.Shared.Data;
|
|
||||||
using Microsoft.EntityFrameworkCore;
|
using Microsoft.EntityFrameworkCore;
|
||||||
using Microsoft.EntityFrameworkCore.Infrastructure;
|
using Microsoft.EntityFrameworkCore.Infrastructure;
|
||||||
using Microsoft.EntityFrameworkCore.Migrations;
|
using Microsoft.EntityFrameworkCore.Migrations;
|
||||||
@@ -394,7 +393,7 @@ namespace DysonNetwork.Pass.Migrations
|
|||||||
.HasColumnType("jsonb")
|
.HasColumnType("jsonb")
|
||||||
.HasColumnName("active_badge");
|
.HasColumnName("active_badge");
|
||||||
|
|
||||||
b.Property<CloudFileReferenceObject>("Background")
|
b.Property<SnCloudFileReferenceObject>("Background")
|
||||||
.HasColumnType("jsonb")
|
.HasColumnType("jsonb")
|
||||||
.HasColumnName("background");
|
.HasColumnName("background");
|
||||||
|
|
||||||
@@ -452,7 +451,7 @@ namespace DysonNetwork.Pass.Migrations
|
|||||||
.HasColumnType("character varying(256)")
|
.HasColumnType("character varying(256)")
|
||||||
.HasColumnName("middle_name");
|
.HasColumnName("middle_name");
|
||||||
|
|
||||||
b.Property<CloudFileReferenceObject>("Picture")
|
b.Property<SnCloudFileReferenceObject>("Picture")
|
||||||
.HasColumnType("jsonb")
|
.HasColumnType("jsonb")
|
||||||
.HasColumnName("picture");
|
.HasColumnName("picture");
|
||||||
|
|
||||||
@@ -470,7 +469,7 @@ namespace DysonNetwork.Pass.Migrations
|
|||||||
.HasColumnType("timestamp with time zone")
|
.HasColumnType("timestamp with time zone")
|
||||||
.HasColumnName("updated_at");
|
.HasColumnName("updated_at");
|
||||||
|
|
||||||
b.Property<VerificationMark>("Verification")
|
b.Property<SnVerificationMark>("Verification")
|
||||||
.HasColumnType("jsonb")
|
.HasColumnType("jsonb")
|
||||||
.HasColumnName("verification");
|
.HasColumnName("verification");
|
||||||
|
|
||||||
|
@@ -4,8 +4,7 @@ using System.Collections.Generic;
|
|||||||
using System.Text.Json;
|
using System.Text.Json;
|
||||||
using DysonNetwork.Pass;
|
using DysonNetwork.Pass;
|
||||||
using DysonNetwork.Pass.Account;
|
using DysonNetwork.Pass.Account;
|
||||||
using DysonNetwork.Pass.Wallet;
|
using DysonNetwork.Shared.Models;
|
||||||
using DysonNetwork.Shared.Data;
|
|
||||||
using Microsoft.EntityFrameworkCore;
|
using Microsoft.EntityFrameworkCore;
|
||||||
using Microsoft.EntityFrameworkCore.Infrastructure;
|
using Microsoft.EntityFrameworkCore.Infrastructure;
|
||||||
using Microsoft.EntityFrameworkCore.Migrations;
|
using Microsoft.EntityFrameworkCore.Migrations;
|
||||||
@@ -394,7 +393,7 @@ namespace DysonNetwork.Pass.Migrations
|
|||||||
.HasColumnType("jsonb")
|
.HasColumnType("jsonb")
|
||||||
.HasColumnName("active_badge");
|
.HasColumnName("active_badge");
|
||||||
|
|
||||||
b.Property<CloudFileReferenceObject>("Background")
|
b.Property<SnCloudFileReferenceObject>("Background")
|
||||||
.HasColumnType("jsonb")
|
.HasColumnType("jsonb")
|
||||||
.HasColumnName("background");
|
.HasColumnName("background");
|
||||||
|
|
||||||
@@ -452,7 +451,7 @@ namespace DysonNetwork.Pass.Migrations
|
|||||||
.HasColumnType("character varying(256)")
|
.HasColumnType("character varying(256)")
|
||||||
.HasColumnName("middle_name");
|
.HasColumnName("middle_name");
|
||||||
|
|
||||||
b.Property<CloudFileReferenceObject>("Picture")
|
b.Property<SnCloudFileReferenceObject>("Picture")
|
||||||
.HasColumnType("jsonb")
|
.HasColumnType("jsonb")
|
||||||
.HasColumnName("picture");
|
.HasColumnName("picture");
|
||||||
|
|
||||||
@@ -470,7 +469,7 @@ namespace DysonNetwork.Pass.Migrations
|
|||||||
.HasColumnType("timestamp with time zone")
|
.HasColumnType("timestamp with time zone")
|
||||||
.HasColumnName("updated_at");
|
.HasColumnName("updated_at");
|
||||||
|
|
||||||
b.Property<VerificationMark>("Verification")
|
b.Property<SnVerificationMark>("Verification")
|
||||||
.HasColumnType("jsonb")
|
.HasColumnType("jsonb")
|
||||||
.HasColumnName("verification");
|
.HasColumnName("verification");
|
||||||
|
|
||||||
|
@@ -4,8 +4,7 @@ using System.Collections.Generic;
|
|||||||
using System.Text.Json;
|
using System.Text.Json;
|
||||||
using DysonNetwork.Pass;
|
using DysonNetwork.Pass;
|
||||||
using DysonNetwork.Pass.Account;
|
using DysonNetwork.Pass.Account;
|
||||||
using DysonNetwork.Pass.Wallet;
|
using DysonNetwork.Shared.Models;
|
||||||
using DysonNetwork.Shared.Data;
|
|
||||||
using Microsoft.EntityFrameworkCore;
|
using Microsoft.EntityFrameworkCore;
|
||||||
using Microsoft.EntityFrameworkCore.Infrastructure;
|
using Microsoft.EntityFrameworkCore.Infrastructure;
|
||||||
using Microsoft.EntityFrameworkCore.Migrations;
|
using Microsoft.EntityFrameworkCore.Migrations;
|
||||||
@@ -398,7 +397,7 @@ namespace DysonNetwork.Pass.Migrations
|
|||||||
.HasColumnType("jsonb")
|
.HasColumnType("jsonb")
|
||||||
.HasColumnName("active_badge");
|
.HasColumnName("active_badge");
|
||||||
|
|
||||||
b.Property<CloudFileReferenceObject>("Background")
|
b.Property<SnCloudFileReferenceObject>("Background")
|
||||||
.HasColumnType("jsonb")
|
.HasColumnType("jsonb")
|
||||||
.HasColumnName("background");
|
.HasColumnName("background");
|
||||||
|
|
||||||
@@ -456,7 +455,7 @@ namespace DysonNetwork.Pass.Migrations
|
|||||||
.HasColumnType("character varying(256)")
|
.HasColumnType("character varying(256)")
|
||||||
.HasColumnName("middle_name");
|
.HasColumnName("middle_name");
|
||||||
|
|
||||||
b.Property<CloudFileReferenceObject>("Picture")
|
b.Property<SnCloudFileReferenceObject>("Picture")
|
||||||
.HasColumnType("jsonb")
|
.HasColumnType("jsonb")
|
||||||
.HasColumnName("picture");
|
.HasColumnName("picture");
|
||||||
|
|
||||||
@@ -474,7 +473,7 @@ namespace DysonNetwork.Pass.Migrations
|
|||||||
.HasColumnType("timestamp with time zone")
|
.HasColumnType("timestamp with time zone")
|
||||||
.HasColumnName("updated_at");
|
.HasColumnName("updated_at");
|
||||||
|
|
||||||
b.Property<VerificationMark>("Verification")
|
b.Property<SnVerificationMark>("Verification")
|
||||||
.HasColumnType("jsonb")
|
.HasColumnType("jsonb")
|
||||||
.HasColumnName("verification");
|
.HasColumnName("verification");
|
||||||
|
|
||||||
|
@@ -4,8 +4,7 @@ using System.Collections.Generic;
|
|||||||
using System.Text.Json;
|
using System.Text.Json;
|
||||||
using DysonNetwork.Pass;
|
using DysonNetwork.Pass;
|
||||||
using DysonNetwork.Pass.Account;
|
using DysonNetwork.Pass.Account;
|
||||||
using DysonNetwork.Pass.Wallet;
|
using DysonNetwork.Shared.Models;
|
||||||
using DysonNetwork.Shared.Data;
|
|
||||||
using Microsoft.EntityFrameworkCore;
|
using Microsoft.EntityFrameworkCore;
|
||||||
using Microsoft.EntityFrameworkCore.Infrastructure;
|
using Microsoft.EntityFrameworkCore.Infrastructure;
|
||||||
using Microsoft.EntityFrameworkCore.Migrations;
|
using Microsoft.EntityFrameworkCore.Migrations;
|
||||||
@@ -398,7 +397,7 @@ namespace DysonNetwork.Pass.Migrations
|
|||||||
.HasColumnType("jsonb")
|
.HasColumnType("jsonb")
|
||||||
.HasColumnName("active_badge");
|
.HasColumnName("active_badge");
|
||||||
|
|
||||||
b.Property<CloudFileReferenceObject>("Background")
|
b.Property<SnCloudFileReferenceObject>("Background")
|
||||||
.HasColumnType("jsonb")
|
.HasColumnType("jsonb")
|
||||||
.HasColumnName("background");
|
.HasColumnName("background");
|
||||||
|
|
||||||
@@ -456,7 +455,7 @@ namespace DysonNetwork.Pass.Migrations
|
|||||||
.HasColumnType("character varying(256)")
|
.HasColumnType("character varying(256)")
|
||||||
.HasColumnName("middle_name");
|
.HasColumnName("middle_name");
|
||||||
|
|
||||||
b.Property<CloudFileReferenceObject>("Picture")
|
b.Property<SnCloudFileReferenceObject>("Picture")
|
||||||
.HasColumnType("jsonb")
|
.HasColumnType("jsonb")
|
||||||
.HasColumnName("picture");
|
.HasColumnName("picture");
|
||||||
|
|
||||||
@@ -474,7 +473,7 @@ namespace DysonNetwork.Pass.Migrations
|
|||||||
.HasColumnType("timestamp with time zone")
|
.HasColumnType("timestamp with time zone")
|
||||||
.HasColumnName("updated_at");
|
.HasColumnName("updated_at");
|
||||||
|
|
||||||
b.Property<VerificationMark>("Verification")
|
b.Property<SnVerificationMark>("Verification")
|
||||||
.HasColumnType("jsonb")
|
.HasColumnType("jsonb")
|
||||||
.HasColumnName("verification");
|
.HasColumnName("verification");
|
||||||
|
|
||||||
|
@@ -4,8 +4,7 @@ using System.Collections.Generic;
|
|||||||
using System.Text.Json;
|
using System.Text.Json;
|
||||||
using DysonNetwork.Pass;
|
using DysonNetwork.Pass;
|
||||||
using DysonNetwork.Pass.Account;
|
using DysonNetwork.Pass.Account;
|
||||||
using DysonNetwork.Pass.Wallet;
|
using DysonNetwork.Shared.Models;
|
||||||
using DysonNetwork.Shared.Data;
|
|
||||||
using Microsoft.EntityFrameworkCore;
|
using Microsoft.EntityFrameworkCore;
|
||||||
using Microsoft.EntityFrameworkCore.Infrastructure;
|
using Microsoft.EntityFrameworkCore.Infrastructure;
|
||||||
using Microsoft.EntityFrameworkCore.Migrations;
|
using Microsoft.EntityFrameworkCore.Migrations;
|
||||||
@@ -398,7 +397,7 @@ namespace DysonNetwork.Pass.Migrations
|
|||||||
.HasColumnType("jsonb")
|
.HasColumnType("jsonb")
|
||||||
.HasColumnName("active_badge");
|
.HasColumnName("active_badge");
|
||||||
|
|
||||||
b.Property<CloudFileReferenceObject>("Background")
|
b.Property<SnCloudFileReferenceObject>("Background")
|
||||||
.HasColumnType("jsonb")
|
.HasColumnType("jsonb")
|
||||||
.HasColumnName("background");
|
.HasColumnName("background");
|
||||||
|
|
||||||
@@ -456,7 +455,7 @@ namespace DysonNetwork.Pass.Migrations
|
|||||||
.HasColumnType("character varying(256)")
|
.HasColumnType("character varying(256)")
|
||||||
.HasColumnName("middle_name");
|
.HasColumnName("middle_name");
|
||||||
|
|
||||||
b.Property<CloudFileReferenceObject>("Picture")
|
b.Property<SnCloudFileReferenceObject>("Picture")
|
||||||
.HasColumnType("jsonb")
|
.HasColumnType("jsonb")
|
||||||
.HasColumnName("picture");
|
.HasColumnName("picture");
|
||||||
|
|
||||||
@@ -474,7 +473,7 @@ namespace DysonNetwork.Pass.Migrations
|
|||||||
.HasColumnType("timestamp with time zone")
|
.HasColumnType("timestamp with time zone")
|
||||||
.HasColumnName("updated_at");
|
.HasColumnName("updated_at");
|
||||||
|
|
||||||
b.Property<VerificationMark>("Verification")
|
b.Property<SnVerificationMark>("Verification")
|
||||||
.HasColumnType("jsonb")
|
.HasColumnType("jsonb")
|
||||||
.HasColumnName("verification");
|
.HasColumnName("verification");
|
||||||
|
|
||||||
|
@@ -4,8 +4,7 @@ using System.Collections.Generic;
|
|||||||
using System.Text.Json;
|
using System.Text.Json;
|
||||||
using DysonNetwork.Pass;
|
using DysonNetwork.Pass;
|
||||||
using DysonNetwork.Pass.Account;
|
using DysonNetwork.Pass.Account;
|
||||||
using DysonNetwork.Pass.Wallet;
|
using DysonNetwork.Shared.Models;
|
||||||
using DysonNetwork.Shared.Data;
|
|
||||||
using Microsoft.EntityFrameworkCore;
|
using Microsoft.EntityFrameworkCore;
|
||||||
using Microsoft.EntityFrameworkCore.Infrastructure;
|
using Microsoft.EntityFrameworkCore.Infrastructure;
|
||||||
using Microsoft.EntityFrameworkCore.Migrations;
|
using Microsoft.EntityFrameworkCore.Migrations;
|
||||||
@@ -398,7 +397,7 @@ namespace DysonNetwork.Pass.Migrations
|
|||||||
.HasColumnType("jsonb")
|
.HasColumnType("jsonb")
|
||||||
.HasColumnName("active_badge");
|
.HasColumnName("active_badge");
|
||||||
|
|
||||||
b.Property<CloudFileReferenceObject>("Background")
|
b.Property<SnCloudFileReferenceObject>("Background")
|
||||||
.HasColumnType("jsonb")
|
.HasColumnType("jsonb")
|
||||||
.HasColumnName("background");
|
.HasColumnName("background");
|
||||||
|
|
||||||
@@ -456,7 +455,7 @@ namespace DysonNetwork.Pass.Migrations
|
|||||||
.HasColumnType("character varying(256)")
|
.HasColumnType("character varying(256)")
|
||||||
.HasColumnName("middle_name");
|
.HasColumnName("middle_name");
|
||||||
|
|
||||||
b.Property<CloudFileReferenceObject>("Picture")
|
b.Property<SnCloudFileReferenceObject>("Picture")
|
||||||
.HasColumnType("jsonb")
|
.HasColumnType("jsonb")
|
||||||
.HasColumnName("picture");
|
.HasColumnName("picture");
|
||||||
|
|
||||||
@@ -474,7 +473,7 @@ namespace DysonNetwork.Pass.Migrations
|
|||||||
.HasColumnType("timestamp with time zone")
|
.HasColumnType("timestamp with time zone")
|
||||||
.HasColumnName("updated_at");
|
.HasColumnName("updated_at");
|
||||||
|
|
||||||
b.Property<VerificationMark>("Verification")
|
b.Property<SnVerificationMark>("Verification")
|
||||||
.HasColumnType("jsonb")
|
.HasColumnType("jsonb")
|
||||||
.HasColumnName("verification");
|
.HasColumnName("verification");
|
||||||
|
|
||||||
|
@@ -4,8 +4,7 @@ using System.Collections.Generic;
|
|||||||
using System.Text.Json;
|
using System.Text.Json;
|
||||||
using DysonNetwork.Pass;
|
using DysonNetwork.Pass;
|
||||||
using DysonNetwork.Pass.Account;
|
using DysonNetwork.Pass.Account;
|
||||||
using DysonNetwork.Pass.Wallet;
|
using DysonNetwork.Shared.Models;
|
||||||
using DysonNetwork.Shared.Data;
|
|
||||||
using Microsoft.EntityFrameworkCore;
|
using Microsoft.EntityFrameworkCore;
|
||||||
using Microsoft.EntityFrameworkCore.Infrastructure;
|
using Microsoft.EntityFrameworkCore.Infrastructure;
|
||||||
using Microsoft.EntityFrameworkCore.Migrations;
|
using Microsoft.EntityFrameworkCore.Migrations;
|
||||||
@@ -398,7 +397,7 @@ namespace DysonNetwork.Pass.Migrations
|
|||||||
.HasColumnType("jsonb")
|
.HasColumnType("jsonb")
|
||||||
.HasColumnName("active_badge");
|
.HasColumnName("active_badge");
|
||||||
|
|
||||||
b.Property<CloudFileReferenceObject>("Background")
|
b.Property<SnCloudFileReferenceObject>("Background")
|
||||||
.HasColumnType("jsonb")
|
.HasColumnType("jsonb")
|
||||||
.HasColumnName("background");
|
.HasColumnName("background");
|
||||||
|
|
||||||
@@ -456,7 +455,7 @@ namespace DysonNetwork.Pass.Migrations
|
|||||||
.HasColumnType("character varying(256)")
|
.HasColumnType("character varying(256)")
|
||||||
.HasColumnName("middle_name");
|
.HasColumnName("middle_name");
|
||||||
|
|
||||||
b.Property<CloudFileReferenceObject>("Picture")
|
b.Property<SnCloudFileReferenceObject>("Picture")
|
||||||
.HasColumnType("jsonb")
|
.HasColumnType("jsonb")
|
||||||
.HasColumnName("picture");
|
.HasColumnName("picture");
|
||||||
|
|
||||||
@@ -478,7 +477,7 @@ namespace DysonNetwork.Pass.Migrations
|
|||||||
.HasColumnType("timestamp with time zone")
|
.HasColumnType("timestamp with time zone")
|
||||||
.HasColumnName("updated_at");
|
.HasColumnName("updated_at");
|
||||||
|
|
||||||
b.Property<VerificationMark>("Verification")
|
b.Property<SnVerificationMark>("Verification")
|
||||||
.HasColumnType("jsonb")
|
.HasColumnType("jsonb")
|
||||||
.HasColumnName("verification");
|
.HasColumnName("verification");
|
||||||
|
|
||||||
|
@@ -4,8 +4,7 @@ using System.Collections.Generic;
|
|||||||
using System.Text.Json;
|
using System.Text.Json;
|
||||||
using DysonNetwork.Pass;
|
using DysonNetwork.Pass;
|
||||||
using DysonNetwork.Pass.Account;
|
using DysonNetwork.Pass.Account;
|
||||||
using DysonNetwork.Pass.Wallet;
|
using DysonNetwork.Shared.Models;
|
||||||
using DysonNetwork.Shared.Data;
|
|
||||||
using Microsoft.EntityFrameworkCore;
|
using Microsoft.EntityFrameworkCore;
|
||||||
using Microsoft.EntityFrameworkCore.Infrastructure;
|
using Microsoft.EntityFrameworkCore.Infrastructure;
|
||||||
using Microsoft.EntityFrameworkCore.Migrations;
|
using Microsoft.EntityFrameworkCore.Migrations;
|
||||||
@@ -398,7 +397,7 @@ namespace DysonNetwork.Pass.Migrations
|
|||||||
.HasColumnType("jsonb")
|
.HasColumnType("jsonb")
|
||||||
.HasColumnName("active_badge");
|
.HasColumnName("active_badge");
|
||||||
|
|
||||||
b.Property<CloudFileReferenceObject>("Background")
|
b.Property<SnCloudFileReferenceObject>("Background")
|
||||||
.HasColumnType("jsonb")
|
.HasColumnType("jsonb")
|
||||||
.HasColumnName("background");
|
.HasColumnName("background");
|
||||||
|
|
||||||
@@ -456,7 +455,7 @@ namespace DysonNetwork.Pass.Migrations
|
|||||||
.HasColumnType("character varying(256)")
|
.HasColumnType("character varying(256)")
|
||||||
.HasColumnName("middle_name");
|
.HasColumnName("middle_name");
|
||||||
|
|
||||||
b.Property<CloudFileReferenceObject>("Picture")
|
b.Property<SnCloudFileReferenceObject>("Picture")
|
||||||
.HasColumnType("jsonb")
|
.HasColumnType("jsonb")
|
||||||
.HasColumnName("picture");
|
.HasColumnName("picture");
|
||||||
|
|
||||||
@@ -478,7 +477,7 @@ namespace DysonNetwork.Pass.Migrations
|
|||||||
.HasColumnType("timestamp with time zone")
|
.HasColumnType("timestamp with time zone")
|
||||||
.HasColumnName("updated_at");
|
.HasColumnName("updated_at");
|
||||||
|
|
||||||
b.Property<VerificationMark>("Verification")
|
b.Property<SnVerificationMark>("Verification")
|
||||||
.HasColumnType("jsonb")
|
.HasColumnType("jsonb")
|
||||||
.HasColumnName("verification");
|
.HasColumnName("verification");
|
||||||
|
|
||||||
|
@@ -4,8 +4,7 @@ using System.Collections.Generic;
|
|||||||
using System.Text.Json;
|
using System.Text.Json;
|
||||||
using DysonNetwork.Pass;
|
using DysonNetwork.Pass;
|
||||||
using DysonNetwork.Pass.Account;
|
using DysonNetwork.Pass.Account;
|
||||||
using DysonNetwork.Pass.Wallet;
|
using DysonNetwork.Shared.Models;
|
||||||
using DysonNetwork.Shared.Data;
|
|
||||||
using Microsoft.EntityFrameworkCore;
|
using Microsoft.EntityFrameworkCore;
|
||||||
using Microsoft.EntityFrameworkCore.Infrastructure;
|
using Microsoft.EntityFrameworkCore.Infrastructure;
|
||||||
using Microsoft.EntityFrameworkCore.Migrations;
|
using Microsoft.EntityFrameworkCore.Migrations;
|
||||||
@@ -404,7 +403,7 @@ namespace DysonNetwork.Pass.Migrations
|
|||||||
.HasColumnType("jsonb")
|
.HasColumnType("jsonb")
|
||||||
.HasColumnName("active_badge");
|
.HasColumnName("active_badge");
|
||||||
|
|
||||||
b.Property<CloudFileReferenceObject>("Background")
|
b.Property<SnCloudFileReferenceObject>("Background")
|
||||||
.HasColumnType("jsonb")
|
.HasColumnType("jsonb")
|
||||||
.HasColumnName("background");
|
.HasColumnName("background");
|
||||||
|
|
||||||
@@ -462,7 +461,7 @@ namespace DysonNetwork.Pass.Migrations
|
|||||||
.HasColumnType("character varying(256)")
|
.HasColumnType("character varying(256)")
|
||||||
.HasColumnName("middle_name");
|
.HasColumnName("middle_name");
|
||||||
|
|
||||||
b.Property<CloudFileReferenceObject>("Picture")
|
b.Property<SnCloudFileReferenceObject>("Picture")
|
||||||
.HasColumnType("jsonb")
|
.HasColumnType("jsonb")
|
||||||
.HasColumnName("picture");
|
.HasColumnName("picture");
|
||||||
|
|
||||||
@@ -484,7 +483,7 @@ namespace DysonNetwork.Pass.Migrations
|
|||||||
.HasColumnType("timestamp with time zone")
|
.HasColumnType("timestamp with time zone")
|
||||||
.HasColumnName("updated_at");
|
.HasColumnName("updated_at");
|
||||||
|
|
||||||
b.Property<VerificationMark>("Verification")
|
b.Property<SnVerificationMark>("Verification")
|
||||||
.HasColumnType("jsonb")
|
.HasColumnType("jsonb")
|
||||||
.HasColumnName("verification");
|
.HasColumnName("verification");
|
||||||
|
|
||||||
|
@@ -4,9 +4,8 @@ using System.Collections.Generic;
|
|||||||
using System.Text.Json;
|
using System.Text.Json;
|
||||||
using DysonNetwork.Pass;
|
using DysonNetwork.Pass;
|
||||||
using DysonNetwork.Pass.Account;
|
using DysonNetwork.Pass.Account;
|
||||||
using DysonNetwork.Pass.Wallet;
|
|
||||||
using DysonNetwork.Shared.Data;
|
|
||||||
using DysonNetwork.Shared.GeoIp;
|
using DysonNetwork.Shared.GeoIp;
|
||||||
|
using DysonNetwork.Shared.Models;
|
||||||
using Microsoft.EntityFrameworkCore;
|
using Microsoft.EntityFrameworkCore;
|
||||||
using Microsoft.EntityFrameworkCore.Infrastructure;
|
using Microsoft.EntityFrameworkCore.Infrastructure;
|
||||||
using Microsoft.EntityFrameworkCore.Migrations;
|
using Microsoft.EntityFrameworkCore.Migrations;
|
||||||
@@ -404,7 +403,7 @@ namespace DysonNetwork.Pass.Migrations
|
|||||||
.HasColumnType("jsonb")
|
.HasColumnType("jsonb")
|
||||||
.HasColumnName("active_badge");
|
.HasColumnName("active_badge");
|
||||||
|
|
||||||
b.Property<CloudFileReferenceObject>("Background")
|
b.Property<SnCloudFileReferenceObject>("Background")
|
||||||
.HasColumnType("jsonb")
|
.HasColumnType("jsonb")
|
||||||
.HasColumnName("background");
|
.HasColumnName("background");
|
||||||
|
|
||||||
@@ -462,7 +461,7 @@ namespace DysonNetwork.Pass.Migrations
|
|||||||
.HasColumnType("character varying(256)")
|
.HasColumnType("character varying(256)")
|
||||||
.HasColumnName("middle_name");
|
.HasColumnName("middle_name");
|
||||||
|
|
||||||
b.Property<CloudFileReferenceObject>("Picture")
|
b.Property<SnCloudFileReferenceObject>("Picture")
|
||||||
.HasColumnType("jsonb")
|
.HasColumnType("jsonb")
|
||||||
.HasColumnName("picture");
|
.HasColumnName("picture");
|
||||||
|
|
||||||
@@ -484,7 +483,7 @@ namespace DysonNetwork.Pass.Migrations
|
|||||||
.HasColumnType("timestamp with time zone")
|
.HasColumnType("timestamp with time zone")
|
||||||
.HasColumnName("updated_at");
|
.HasColumnName("updated_at");
|
||||||
|
|
||||||
b.Property<VerificationMark>("Verification")
|
b.Property<SnVerificationMark>("Verification")
|
||||||
.HasColumnType("jsonb")
|
.HasColumnType("jsonb")
|
||||||
.HasColumnName("verification");
|
.HasColumnName("verification");
|
||||||
|
|
||||||
|
@@ -4,9 +4,8 @@ using System.Collections.Generic;
|
|||||||
using System.Text.Json;
|
using System.Text.Json;
|
||||||
using DysonNetwork.Pass;
|
using DysonNetwork.Pass;
|
||||||
using DysonNetwork.Pass.Account;
|
using DysonNetwork.Pass.Account;
|
||||||
using DysonNetwork.Pass.Wallet;
|
|
||||||
using DysonNetwork.Shared.Data;
|
|
||||||
using DysonNetwork.Shared.GeoIp;
|
using DysonNetwork.Shared.GeoIp;
|
||||||
|
using DysonNetwork.Shared.Models;
|
||||||
using Microsoft.EntityFrameworkCore;
|
using Microsoft.EntityFrameworkCore;
|
||||||
using Microsoft.EntityFrameworkCore.Infrastructure;
|
using Microsoft.EntityFrameworkCore.Infrastructure;
|
||||||
using Microsoft.EntityFrameworkCore.Migrations;
|
using Microsoft.EntityFrameworkCore.Migrations;
|
||||||
@@ -403,7 +402,7 @@ namespace DysonNetwork.Pass.Migrations
|
|||||||
.HasColumnType("jsonb")
|
.HasColumnType("jsonb")
|
||||||
.HasColumnName("active_badge");
|
.HasColumnName("active_badge");
|
||||||
|
|
||||||
b.Property<CloudFileReferenceObject>("Background")
|
b.Property<SnCloudFileReferenceObject>("Background")
|
||||||
.HasColumnType("jsonb")
|
.HasColumnType("jsonb")
|
||||||
.HasColumnName("background");
|
.HasColumnName("background");
|
||||||
|
|
||||||
@@ -461,7 +460,7 @@ namespace DysonNetwork.Pass.Migrations
|
|||||||
.HasColumnType("character varying(256)")
|
.HasColumnType("character varying(256)")
|
||||||
.HasColumnName("middle_name");
|
.HasColumnName("middle_name");
|
||||||
|
|
||||||
b.Property<CloudFileReferenceObject>("Picture")
|
b.Property<SnCloudFileReferenceObject>("Picture")
|
||||||
.HasColumnType("jsonb")
|
.HasColumnType("jsonb")
|
||||||
.HasColumnName("picture");
|
.HasColumnName("picture");
|
||||||
|
|
||||||
@@ -483,7 +482,7 @@ namespace DysonNetwork.Pass.Migrations
|
|||||||
.HasColumnType("timestamp with time zone")
|
.HasColumnType("timestamp with time zone")
|
||||||
.HasColumnName("updated_at");
|
.HasColumnName("updated_at");
|
||||||
|
|
||||||
b.Property<VerificationMark>("Verification")
|
b.Property<SnVerificationMark>("Verification")
|
||||||
.HasColumnType("jsonb")
|
.HasColumnType("jsonb")
|
||||||
.HasColumnName("verification");
|
.HasColumnName("verification");
|
||||||
|
|
||||||
|
@@ -4,9 +4,8 @@ using System.Collections.Generic;
|
|||||||
using System.Text.Json;
|
using System.Text.Json;
|
||||||
using DysonNetwork.Pass;
|
using DysonNetwork.Pass;
|
||||||
using DysonNetwork.Pass.Account;
|
using DysonNetwork.Pass.Account;
|
||||||
using DysonNetwork.Pass.Wallet;
|
|
||||||
using DysonNetwork.Shared.Data;
|
|
||||||
using DysonNetwork.Shared.GeoIp;
|
using DysonNetwork.Shared.GeoIp;
|
||||||
|
using DysonNetwork.Shared.Models;
|
||||||
using Microsoft.EntityFrameworkCore;
|
using Microsoft.EntityFrameworkCore;
|
||||||
using Microsoft.EntityFrameworkCore.Infrastructure;
|
using Microsoft.EntityFrameworkCore.Infrastructure;
|
||||||
using Microsoft.EntityFrameworkCore.Migrations;
|
using Microsoft.EntityFrameworkCore.Migrations;
|
||||||
@@ -403,7 +402,7 @@ namespace DysonNetwork.Pass.Migrations
|
|||||||
.HasColumnType("jsonb")
|
.HasColumnType("jsonb")
|
||||||
.HasColumnName("active_badge");
|
.HasColumnName("active_badge");
|
||||||
|
|
||||||
b.Property<CloudFileReferenceObject>("Background")
|
b.Property<SnCloudFileReferenceObject>("Background")
|
||||||
.HasColumnType("jsonb")
|
.HasColumnType("jsonb")
|
||||||
.HasColumnName("background");
|
.HasColumnName("background");
|
||||||
|
|
||||||
@@ -461,7 +460,7 @@ namespace DysonNetwork.Pass.Migrations
|
|||||||
.HasColumnType("character varying(256)")
|
.HasColumnType("character varying(256)")
|
||||||
.HasColumnName("middle_name");
|
.HasColumnName("middle_name");
|
||||||
|
|
||||||
b.Property<CloudFileReferenceObject>("Picture")
|
b.Property<SnCloudFileReferenceObject>("Picture")
|
||||||
.HasColumnType("jsonb")
|
.HasColumnType("jsonb")
|
||||||
.HasColumnName("picture");
|
.HasColumnName("picture");
|
||||||
|
|
||||||
@@ -483,7 +482,7 @@ namespace DysonNetwork.Pass.Migrations
|
|||||||
.HasColumnType("timestamp with time zone")
|
.HasColumnType("timestamp with time zone")
|
||||||
.HasColumnName("updated_at");
|
.HasColumnName("updated_at");
|
||||||
|
|
||||||
b.Property<VerificationMark>("Verification")
|
b.Property<SnVerificationMark>("Verification")
|
||||||
.HasColumnType("jsonb")
|
.HasColumnType("jsonb")
|
||||||
.HasColumnName("verification");
|
.HasColumnName("verification");
|
||||||
|
|
||||||
|
@@ -4,9 +4,8 @@ using System.Collections.Generic;
|
|||||||
using System.Text.Json;
|
using System.Text.Json;
|
||||||
using DysonNetwork.Pass;
|
using DysonNetwork.Pass;
|
||||||
using DysonNetwork.Pass.Account;
|
using DysonNetwork.Pass.Account;
|
||||||
using DysonNetwork.Pass.Wallet;
|
|
||||||
using DysonNetwork.Shared.Data;
|
|
||||||
using DysonNetwork.Shared.GeoIp;
|
using DysonNetwork.Shared.GeoIp;
|
||||||
|
using DysonNetwork.Shared.Models;
|
||||||
using Microsoft.EntityFrameworkCore;
|
using Microsoft.EntityFrameworkCore;
|
||||||
using Microsoft.EntityFrameworkCore.Infrastructure;
|
using Microsoft.EntityFrameworkCore.Infrastructure;
|
||||||
using Microsoft.EntityFrameworkCore.Migrations;
|
using Microsoft.EntityFrameworkCore.Migrations;
|
||||||
@@ -403,7 +402,7 @@ namespace DysonNetwork.Pass.Migrations
|
|||||||
.HasColumnType("jsonb")
|
.HasColumnType("jsonb")
|
||||||
.HasColumnName("active_badge");
|
.HasColumnName("active_badge");
|
||||||
|
|
||||||
b.Property<CloudFileReferenceObject>("Background")
|
b.Property<SnCloudFileReferenceObject>("Background")
|
||||||
.HasColumnType("jsonb")
|
.HasColumnType("jsonb")
|
||||||
.HasColumnName("background");
|
.HasColumnName("background");
|
||||||
|
|
||||||
@@ -461,7 +460,7 @@ namespace DysonNetwork.Pass.Migrations
|
|||||||
.HasColumnType("character varying(256)")
|
.HasColumnType("character varying(256)")
|
||||||
.HasColumnName("middle_name");
|
.HasColumnName("middle_name");
|
||||||
|
|
||||||
b.Property<CloudFileReferenceObject>("Picture")
|
b.Property<SnCloudFileReferenceObject>("Picture")
|
||||||
.HasColumnType("jsonb")
|
.HasColumnType("jsonb")
|
||||||
.HasColumnName("picture");
|
.HasColumnName("picture");
|
||||||
|
|
||||||
@@ -483,7 +482,7 @@ namespace DysonNetwork.Pass.Migrations
|
|||||||
.HasColumnType("timestamp with time zone")
|
.HasColumnType("timestamp with time zone")
|
||||||
.HasColumnName("updated_at");
|
.HasColumnName("updated_at");
|
||||||
|
|
||||||
b.Property<VerificationMark>("Verification")
|
b.Property<SnVerificationMark>("Verification")
|
||||||
.HasColumnType("jsonb")
|
.HasColumnType("jsonb")
|
||||||
.HasColumnName("verification");
|
.HasColumnName("verification");
|
||||||
|
|
||||||
|
@@ -4,9 +4,8 @@ using System.Collections.Generic;
|
|||||||
using System.Text.Json;
|
using System.Text.Json;
|
||||||
using DysonNetwork.Pass;
|
using DysonNetwork.Pass;
|
||||||
using DysonNetwork.Pass.Account;
|
using DysonNetwork.Pass.Account;
|
||||||
using DysonNetwork.Pass.Wallet;
|
|
||||||
using DysonNetwork.Shared.Data;
|
|
||||||
using DysonNetwork.Shared.GeoIp;
|
using DysonNetwork.Shared.GeoIp;
|
||||||
|
using DysonNetwork.Shared.Models;
|
||||||
using Microsoft.EntityFrameworkCore;
|
using Microsoft.EntityFrameworkCore;
|
||||||
using Microsoft.EntityFrameworkCore.Infrastructure;
|
using Microsoft.EntityFrameworkCore.Infrastructure;
|
||||||
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
|
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
|
||||||
@@ -400,7 +399,7 @@ namespace DysonNetwork.Pass.Migrations
|
|||||||
.HasColumnType("jsonb")
|
.HasColumnType("jsonb")
|
||||||
.HasColumnName("active_badge");
|
.HasColumnName("active_badge");
|
||||||
|
|
||||||
b.Property<CloudFileReferenceObject>("Background")
|
b.Property<SnCloudFileReferenceObject>("Background")
|
||||||
.HasColumnType("jsonb")
|
.HasColumnType("jsonb")
|
||||||
.HasColumnName("background");
|
.HasColumnName("background");
|
||||||
|
|
||||||
@@ -458,7 +457,7 @@ namespace DysonNetwork.Pass.Migrations
|
|||||||
.HasColumnType("character varying(256)")
|
.HasColumnType("character varying(256)")
|
||||||
.HasColumnName("middle_name");
|
.HasColumnName("middle_name");
|
||||||
|
|
||||||
b.Property<CloudFileReferenceObject>("Picture")
|
b.Property<SnCloudFileReferenceObject>("Picture")
|
||||||
.HasColumnType("jsonb")
|
.HasColumnType("jsonb")
|
||||||
.HasColumnName("picture");
|
.HasColumnName("picture");
|
||||||
|
|
||||||
@@ -480,7 +479,7 @@ namespace DysonNetwork.Pass.Migrations
|
|||||||
.HasColumnType("timestamp with time zone")
|
.HasColumnType("timestamp with time zone")
|
||||||
.HasColumnName("updated_at");
|
.HasColumnName("updated_at");
|
||||||
|
|
||||||
b.Property<VerificationMark>("Verification")
|
b.Property<SnVerificationMark>("Verification")
|
||||||
.HasColumnType("jsonb")
|
.HasColumnType("jsonb")
|
||||||
.HasColumnName("verification");
|
.HasColumnName("verification");
|
||||||
|
|
||||||
|
@@ -3,6 +3,7 @@ using NodaTime;
|
|||||||
using System.Text.Json;
|
using System.Text.Json;
|
||||||
using DysonNetwork.Pass;
|
using DysonNetwork.Pass;
|
||||||
using DysonNetwork.Shared.Cache;
|
using DysonNetwork.Shared.Cache;
|
||||||
|
using DysonNetwork.Shared.Models;
|
||||||
|
|
||||||
namespace DysonNetwork.Pass.Permission;
|
namespace DysonNetwork.Pass.Permission;
|
||||||
|
|
||||||
@@ -75,7 +76,7 @@ public class PermissionService(
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task<PermissionNode> AddPermissionNode<T>(
|
public async Task<SnPermissionNode> AddPermissionNode<T>(
|
||||||
string actor,
|
string actor,
|
||||||
string area,
|
string area,
|
||||||
string key,
|
string key,
|
||||||
@@ -86,7 +87,7 @@ public class PermissionService(
|
|||||||
{
|
{
|
||||||
if (value is null) throw new ArgumentNullException(nameof(value));
|
if (value is null) throw new ArgumentNullException(nameof(value));
|
||||||
|
|
||||||
var node = new PermissionNode
|
var node = new SnPermissionNode
|
||||||
{
|
{
|
||||||
Actor = actor,
|
Actor = actor,
|
||||||
Key = key,
|
Key = key,
|
||||||
@@ -105,8 +106,8 @@ public class PermissionService(
|
|||||||
return node;
|
return node;
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task<PermissionNode> AddPermissionNodeToGroup<T>(
|
public async Task<SnPermissionNode> AddPermissionNodeToGroup<T>(
|
||||||
PermissionGroup group,
|
SnPermissionGroup group,
|
||||||
string actor,
|
string actor,
|
||||||
string area,
|
string area,
|
||||||
string key,
|
string key,
|
||||||
@@ -117,7 +118,7 @@ public class PermissionService(
|
|||||||
{
|
{
|
||||||
if (value is null) throw new ArgumentNullException(nameof(value));
|
if (value is null) throw new ArgumentNullException(nameof(value));
|
||||||
|
|
||||||
var node = new PermissionNode
|
var node = new SnPermissionNode
|
||||||
{
|
{
|
||||||
Actor = actor,
|
Actor = actor,
|
||||||
Key = key,
|
Key = key,
|
||||||
@@ -152,7 +153,7 @@ public class PermissionService(
|
|||||||
await InvalidatePermissionCacheAsync(actor, area, key);
|
await InvalidatePermissionCacheAsync(actor, area, key);
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task RemovePermissionNodeFromGroup<T>(PermissionGroup group, string actor, string area, string key)
|
public async Task RemovePermissionNodeFromGroup<T>(SnPermissionGroup group, string actor, string area, string key)
|
||||||
{
|
{
|
||||||
var node = await db.PermissionNodes
|
var node = await db.PermissionNodes
|
||||||
.Where(n => n.GroupId == group.Id)
|
.Where(n => n.GroupId == group.Id)
|
||||||
@@ -185,9 +186,9 @@ public class PermissionService(
|
|||||||
return JsonDocument.Parse(str);
|
return JsonDocument.Parse(str);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static PermissionNode NewPermissionNode<T>(string actor, string area, string key, T value)
|
public static SnPermissionNode NewPermissionNode<T>(string actor, string area, string key, T value)
|
||||||
{
|
{
|
||||||
return new PermissionNode
|
return new SnPermissionNode
|
||||||
{
|
{
|
||||||
Actor = actor,
|
Actor = actor,
|
||||||
Area = area,
|
Area = area,
|
||||||
|
@@ -4,6 +4,7 @@ using DysonNetwork.Shared.Proto;
|
|||||||
using Google.Protobuf.WellKnownTypes;
|
using Google.Protobuf.WellKnownTypes;
|
||||||
using System.Text.Json;
|
using System.Text.Json;
|
||||||
using NodaTime.Serialization.Protobuf;
|
using NodaTime.Serialization.Protobuf;
|
||||||
|
using DysonNetwork.Shared.Models;
|
||||||
|
|
||||||
namespace DysonNetwork.Pass.Permission;
|
namespace DysonNetwork.Pass.Permission;
|
||||||
|
|
||||||
|
@@ -1,5 +1,6 @@
|
|||||||
using System.Text.Json;
|
using System.Text.Json;
|
||||||
using DysonNetwork.Pass.Wallet;
|
using DysonNetwork.Pass.Wallet;
|
||||||
|
using DysonNetwork.Shared.Models;
|
||||||
using DysonNetwork.Shared.Proto;
|
using DysonNetwork.Shared.Proto;
|
||||||
using DysonNetwork.Shared.Stream;
|
using DysonNetwork.Shared.Stream;
|
||||||
using NATS.Client.Core;
|
using NATS.Client.Core;
|
||||||
|
@@ -1,79 +0,0 @@
|
|||||||
using System.ComponentModel.DataAnnotations;
|
|
||||||
using System.ComponentModel.DataAnnotations.Schema;
|
|
||||||
using System.Text.Json.Serialization;
|
|
||||||
using DysonNetwork.Shared.Data;
|
|
||||||
using Microsoft.EntityFrameworkCore;
|
|
||||||
using NodaTime;
|
|
||||||
|
|
||||||
namespace DysonNetwork.Pass.Team;
|
|
||||||
|
|
||||||
public enum TeamType
|
|
||||||
{
|
|
||||||
Individual,
|
|
||||||
Organizational
|
|
||||||
}
|
|
||||||
|
|
||||||
[Index(nameof(Name), IsUnique = true)]
|
|
||||||
public class Team : ModelBase, IIdentifiedResource
|
|
||||||
{
|
|
||||||
public Guid Id { get; set; }
|
|
||||||
public TeamType Type { get; set; }
|
|
||||||
[MaxLength(256)] public string Name { get; set; } = string.Empty;
|
|
||||||
[MaxLength(256)] public string Nick { get; set; } = string.Empty;
|
|
||||||
[MaxLength(4096)] public string? Bio { get; set; }
|
|
||||||
|
|
||||||
[Column(TypeName = "jsonb")] public CloudFileReferenceObject? Picture { get; set; }
|
|
||||||
[Column(TypeName = "jsonb")] public CloudFileReferenceObject? Background { get; set; }
|
|
||||||
|
|
||||||
[Column(TypeName = "jsonb")] public VerificationMark? Verification { get; set; }
|
|
||||||
|
|
||||||
[JsonIgnore] public ICollection<TeamMember> Members { get; set; } = new List<TeamMember>();
|
|
||||||
[JsonIgnore] public ICollection<TeamFeature> Features { get; set; } = new List<TeamFeature>();
|
|
||||||
|
|
||||||
public Guid? AccountId { get; set; }
|
|
||||||
public Account.Account? Account { get; set; }
|
|
||||||
|
|
||||||
public string ResourceIdentifier => $"publisher/{Id}";
|
|
||||||
}
|
|
||||||
|
|
||||||
public enum TeamMemberRole
|
|
||||||
{
|
|
||||||
Owner = 100,
|
|
||||||
Manager = 75,
|
|
||||||
Editor = 50,
|
|
||||||
Viewer = 25
|
|
||||||
}
|
|
||||||
|
|
||||||
public class TeamMember : ModelBase
|
|
||||||
{
|
|
||||||
public Guid TeamId { get; set; }
|
|
||||||
[JsonIgnore] public Team Team { get; set; } = null!;
|
|
||||||
public Guid AccountId { get; set; }
|
|
||||||
public Account.Account Account { get; set; } = null!;
|
|
||||||
|
|
||||||
public TeamMemberRole Role { get; set; } = TeamMemberRole.Viewer;
|
|
||||||
public Instant? JoinedAt { get; set; }
|
|
||||||
}
|
|
||||||
|
|
||||||
public enum TeamSubscriptionStatus
|
|
||||||
{
|
|
||||||
Active,
|
|
||||||
Expired,
|
|
||||||
Cancelled
|
|
||||||
}
|
|
||||||
|
|
||||||
public class TeamFeature : ModelBase
|
|
||||||
{
|
|
||||||
public Guid Id { get; set; }
|
|
||||||
[MaxLength(1024)] public string Flag { get; set; } = null!;
|
|
||||||
public Instant? ExpiredAt { get; set; }
|
|
||||||
|
|
||||||
public Guid TeamId { get; set; }
|
|
||||||
public Team Team { get; set; } = null!;
|
|
||||||
}
|
|
||||||
|
|
||||||
public abstract class TeamFeatureFlag
|
|
||||||
{
|
|
||||||
public static List<string> AllFlags => [Develop];
|
|
||||||
public static string Develop = "develop";
|
|
||||||
}
|
|
@@ -1,4 +1,5 @@
|
|||||||
using DysonNetwork.Pass.Auth;
|
using DysonNetwork.Pass.Auth;
|
||||||
|
using DysonNetwork.Shared.Models;
|
||||||
using Microsoft.AspNetCore.Authorization;
|
using Microsoft.AspNetCore.Authorization;
|
||||||
using Microsoft.AspNetCore.Mvc;
|
using Microsoft.AspNetCore.Mvc;
|
||||||
using Microsoft.EntityFrameworkCore;
|
using Microsoft.EntityFrameworkCore;
|
||||||
@@ -10,7 +11,7 @@ namespace DysonNetwork.Pass.Wallet;
|
|||||||
public class OrderController(PaymentService payment, AuthService auth, AppDatabase db) : ControllerBase
|
public class OrderController(PaymentService payment, AuthService auth, AppDatabase db) : ControllerBase
|
||||||
{
|
{
|
||||||
[HttpGet("{id:guid}")]
|
[HttpGet("{id:guid}")]
|
||||||
public async Task<ActionResult<Order>> GetOrderById(Guid id)
|
public async Task<ActionResult<SnWalletOrder>> GetOrderById(Guid id)
|
||||||
{
|
{
|
||||||
var order = await db.PaymentOrders.FindAsync(id);
|
var order = await db.PaymentOrders.FindAsync(id);
|
||||||
|
|
||||||
@@ -22,7 +23,7 @@ public class OrderController(PaymentService payment, AuthService auth, AppDataba
|
|||||||
|
|
||||||
[HttpPost("{id:guid}/pay")]
|
[HttpPost("{id:guid}/pay")]
|
||||||
[Authorize]
|
[Authorize]
|
||||||
public async Task<ActionResult<Order>> PayOrder(Guid id, [FromBody] PayOrderRequest request)
|
public async Task<ActionResult<SnWalletOrder>> PayOrder(Guid id, [FromBody] PayOrderRequest request)
|
||||||
{
|
{
|
||||||
if (HttpContext.Items["CurrentUser"] is not Account.Account currentUser) return Unauthorized();
|
if (HttpContext.Items["CurrentUser"] is not Account.Account currentUser) return Unauthorized();
|
||||||
|
|
||||||
|
@@ -1,6 +1,7 @@
|
|||||||
using System.Globalization;
|
using System.Globalization;
|
||||||
using System.Text.Json;
|
using System.Text.Json;
|
||||||
using DysonNetwork.Pass.Localization;
|
using DysonNetwork.Pass.Localization;
|
||||||
|
using DysonNetwork.Shared.Models;
|
||||||
using DysonNetwork.Shared.Proto;
|
using DysonNetwork.Shared.Proto;
|
||||||
using DysonNetwork.Shared.Stream;
|
using DysonNetwork.Shared.Stream;
|
||||||
using Microsoft.EntityFrameworkCore;
|
using Microsoft.EntityFrameworkCore;
|
||||||
|
@@ -1,3 +1,4 @@
|
|||||||
|
using DysonNetwork.Shared.Models;
|
||||||
using DysonNetwork.Shared.Proto;
|
using DysonNetwork.Shared.Proto;
|
||||||
using Grpc.Core;
|
using Grpc.Core;
|
||||||
using NodaTime;
|
using NodaTime;
|
||||||
|
@@ -4,6 +4,7 @@ using Microsoft.EntityFrameworkCore;
|
|||||||
using NodaTime;
|
using NodaTime;
|
||||||
using System.ComponentModel.DataAnnotations;
|
using System.ComponentModel.DataAnnotations;
|
||||||
using DysonNetwork.Pass.Wallet.PaymentHandlers;
|
using DysonNetwork.Pass.Wallet.PaymentHandlers;
|
||||||
|
using DysonNetwork.Shared.Models;
|
||||||
|
|
||||||
namespace DysonNetwork.Pass.Wallet;
|
namespace DysonNetwork.Pass.Wallet;
|
||||||
|
|
||||||
@@ -14,7 +15,7 @@ public class SubscriptionController(SubscriptionService subscriptions, AfdianPay
|
|||||||
{
|
{
|
||||||
[HttpGet]
|
[HttpGet]
|
||||||
[Authorize]
|
[Authorize]
|
||||||
public async Task<ActionResult<List<Subscription>>> ListSubscriptions(
|
public async Task<ActionResult<List<SnSubscription>>> ListSubscriptions(
|
||||||
[FromQuery] int offset = 0,
|
[FromQuery] int offset = 0,
|
||||||
[FromQuery] int take = 20
|
[FromQuery] int take = 20
|
||||||
)
|
)
|
||||||
@@ -40,7 +41,7 @@ public class SubscriptionController(SubscriptionService subscriptions, AfdianPay
|
|||||||
|
|
||||||
[HttpGet("fuzzy/{prefix}")]
|
[HttpGet("fuzzy/{prefix}")]
|
||||||
[Authorize]
|
[Authorize]
|
||||||
public async Task<ActionResult<Subscription>> GetSubscriptionFuzzy(string prefix)
|
public async Task<ActionResult<SnSubscription>> GetSubscriptionFuzzy(string prefix)
|
||||||
{
|
{
|
||||||
if (HttpContext.Items["CurrentUser"] is not Account.Account currentUser) return Unauthorized();
|
if (HttpContext.Items["CurrentUser"] is not Account.Account currentUser) return Unauthorized();
|
||||||
|
|
||||||
@@ -56,7 +57,7 @@ public class SubscriptionController(SubscriptionService subscriptions, AfdianPay
|
|||||||
|
|
||||||
[HttpGet("{identifier}")]
|
[HttpGet("{identifier}")]
|
||||||
[Authorize]
|
[Authorize]
|
||||||
public async Task<ActionResult<Subscription>> GetSubscription(string identifier)
|
public async Task<ActionResult<SnSubscription>> GetSubscription(string identifier)
|
||||||
{
|
{
|
||||||
if (HttpContext.Items["CurrentUser"] is not Account.Account currentUser) return Unauthorized();
|
if (HttpContext.Items["CurrentUser"] is not Account.Account currentUser) return Unauthorized();
|
||||||
|
|
||||||
@@ -79,7 +80,7 @@ public class SubscriptionController(SubscriptionService subscriptions, AfdianPay
|
|||||||
|
|
||||||
[HttpPost]
|
[HttpPost]
|
||||||
[Authorize]
|
[Authorize]
|
||||||
public async Task<ActionResult<Subscription>> CreateSubscription(
|
public async Task<ActionResult<SnSubscription>> CreateSubscription(
|
||||||
[FromBody] CreateSubscriptionRequest request,
|
[FromBody] CreateSubscriptionRequest request,
|
||||||
[FromHeader(Name = "X-Noop")] bool noop = false
|
[FromHeader(Name = "X-Noop")] bool noop = false
|
||||||
)
|
)
|
||||||
@@ -118,7 +119,7 @@ public class SubscriptionController(SubscriptionService subscriptions, AfdianPay
|
|||||||
|
|
||||||
[HttpPost("{identifier}/cancel")]
|
[HttpPost("{identifier}/cancel")]
|
||||||
[Authorize]
|
[Authorize]
|
||||||
public async Task<ActionResult<Subscription>> CancelSubscription(string identifier)
|
public async Task<ActionResult<SnSubscription>> CancelSubscription(string identifier)
|
||||||
{
|
{
|
||||||
if (HttpContext.Items["CurrentUser"] is not Account.Account currentUser) return Unauthorized();
|
if (HttpContext.Items["CurrentUser"] is not Account.Account currentUser) return Unauthorized();
|
||||||
|
|
||||||
@@ -135,7 +136,7 @@ public class SubscriptionController(SubscriptionService subscriptions, AfdianPay
|
|||||||
|
|
||||||
[HttpPost("{identifier}/order")]
|
[HttpPost("{identifier}/order")]
|
||||||
[Authorize]
|
[Authorize]
|
||||||
public async Task<ActionResult<Order>> CreateSubscriptionOrder(string identifier)
|
public async Task<ActionResult<SnWalletOrder>> CreateSubscriptionOrder(string identifier)
|
||||||
{
|
{
|
||||||
if (HttpContext.Items["CurrentUser"] is not Account.Account currentUser) return Unauthorized();
|
if (HttpContext.Items["CurrentUser"] is not Account.Account currentUser) return Unauthorized();
|
||||||
|
|
||||||
|
@@ -1,3 +1,4 @@
|
|||||||
|
using DysonNetwork.Shared.Models;
|
||||||
using Microsoft.EntityFrameworkCore;
|
using Microsoft.EntityFrameworkCore;
|
||||||
using NodaTime;
|
using NodaTime;
|
||||||
using Quartz;
|
using Quartz;
|
||||||
|
@@ -4,6 +4,7 @@ using System.Text.Json;
|
|||||||
using DysonNetwork.Pass.Localization;
|
using DysonNetwork.Pass.Localization;
|
||||||
using DysonNetwork.Pass.Wallet.PaymentHandlers;
|
using DysonNetwork.Pass.Wallet.PaymentHandlers;
|
||||||
using DysonNetwork.Shared.Cache;
|
using DysonNetwork.Shared.Cache;
|
||||||
|
using DysonNetwork.Shared.Models;
|
||||||
using DysonNetwork.Shared.Proto;
|
using DysonNetwork.Shared.Proto;
|
||||||
using Google.Protobuf.WellKnownTypes;
|
using Google.Protobuf.WellKnownTypes;
|
||||||
using Microsoft.EntityFrameworkCore;
|
using Microsoft.EntityFrameworkCore;
|
||||||
|
@@ -1,5 +1,6 @@
|
|||||||
using System.ComponentModel.DataAnnotations;
|
using System.ComponentModel.DataAnnotations;
|
||||||
using DysonNetwork.Pass.Permission;
|
using DysonNetwork.Pass.Permission;
|
||||||
|
using DysonNetwork.Shared.Models;
|
||||||
using Microsoft.AspNetCore.Authorization;
|
using Microsoft.AspNetCore.Authorization;
|
||||||
using Microsoft.AspNetCore.Mvc;
|
using Microsoft.AspNetCore.Mvc;
|
||||||
using Microsoft.EntityFrameworkCore;
|
using Microsoft.EntityFrameworkCore;
|
||||||
@@ -40,7 +41,7 @@ public class WalletController(AppDatabase db, WalletService ws, PaymentService p
|
|||||||
|
|
||||||
[HttpGet("transactions")]
|
[HttpGet("transactions")]
|
||||||
[Authorize]
|
[Authorize]
|
||||||
public async Task<ActionResult<List<Transaction>>> GetTransactions(
|
public async Task<ActionResult<List<SnWalletTransaction>>> GetTransactions(
|
||||||
[FromQuery] int offset = 0, [FromQuery] int take = 20
|
[FromQuery] int offset = 0, [FromQuery] int take = 20
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
@@ -67,7 +68,7 @@ public class WalletController(AppDatabase db, WalletService ws, PaymentService p
|
|||||||
|
|
||||||
[HttpGet("orders")]
|
[HttpGet("orders")]
|
||||||
[Authorize]
|
[Authorize]
|
||||||
public async Task<ActionResult<List<Order>>> GetOrders(
|
public async Task<ActionResult<List<SnWalletOrder>>> GetOrders(
|
||||||
[FromQuery] int offset = 0, [FromQuery] int take = 20
|
[FromQuery] int offset = 0, [FromQuery] int take = 20
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
@@ -104,7 +105,7 @@ public class WalletController(AppDatabase db, WalletService ws, PaymentService p
|
|||||||
[HttpPost("balance")]
|
[HttpPost("balance")]
|
||||||
[Authorize]
|
[Authorize]
|
||||||
[RequiredPermission("maintenance", "wallets.balance.modify")]
|
[RequiredPermission("maintenance", "wallets.balance.modify")]
|
||||||
public async Task<ActionResult<Transaction>> ModifyWalletBalance([FromBody] WalletBalanceRequest request)
|
public async Task<ActionResult<SnWalletTransaction>> ModifyWalletBalance([FromBody] WalletBalanceRequest request)
|
||||||
{
|
{
|
||||||
var wallet = await ws.GetWalletAsync(request.AccountId);
|
var wallet = await ws.GetWalletAsync(request.AccountId);
|
||||||
if (wallet is null) return NotFound("Wallet was not found.");
|
if (wallet is null) return NotFound("Wallet was not found.");
|
||||||
|
@@ -1,3 +1,4 @@
|
|||||||
|
using DysonNetwork.Shared.Models;
|
||||||
using Microsoft.EntityFrameworkCore;
|
using Microsoft.EntityFrameworkCore;
|
||||||
|
|
||||||
namespace DysonNetwork.Pass.Wallet;
|
namespace DysonNetwork.Pass.Wallet;
|
||||||
@@ -27,7 +28,7 @@ public class WalletService(AppDatabase db)
|
|||||||
return wallet;
|
return wallet;
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task<(WalletPocket wallet, bool isNewlyCreated)> GetOrCreateWalletPocketAsync(
|
public async Task<(SnWalletPocket wallet, bool isNewlyCreated)> GetOrCreateWalletPocketAsync(
|
||||||
Guid walletId,
|
Guid walletId,
|
||||||
string currency,
|
string currency,
|
||||||
decimal? initialAmount = null
|
decimal? initialAmount = null
|
||||||
@@ -36,7 +37,7 @@ public class WalletService(AppDatabase db)
|
|||||||
var pocket = await db.WalletPockets.FirstOrDefaultAsync(p => p.Currency == currency && p.WalletId == walletId);
|
var pocket = await db.WalletPockets.FirstOrDefaultAsync(p => p.Currency == currency && p.WalletId == walletId);
|
||||||
if (pocket != null) return (pocket, false);
|
if (pocket != null) return (pocket, false);
|
||||||
|
|
||||||
pocket = new WalletPocket
|
pocket = new SnWalletPocket
|
||||||
{
|
{
|
||||||
Currency = currency,
|
Currency = currency,
|
||||||
Amount = initialAmount ?? 0,
|
Amount = initialAmount ?? 0,
|
||||||
|
@@ -1,7 +1,7 @@
|
|||||||
using System.Linq.Expressions;
|
using System.Linq.Expressions;
|
||||||
using System.Reflection;
|
using System.Reflection;
|
||||||
using DysonNetwork.Ring.Notification;
|
|
||||||
using DysonNetwork.Shared.Data;
|
using DysonNetwork.Shared.Data;
|
||||||
|
using DysonNetwork.Shared.Models;
|
||||||
using Microsoft.EntityFrameworkCore;
|
using Microsoft.EntityFrameworkCore;
|
||||||
using Microsoft.EntityFrameworkCore.Design;
|
using Microsoft.EntityFrameworkCore.Design;
|
||||||
using Microsoft.EntityFrameworkCore.Query;
|
using Microsoft.EntityFrameworkCore.Query;
|
||||||
@@ -15,8 +15,8 @@ public class AppDatabase(
|
|||||||
IConfiguration configuration
|
IConfiguration configuration
|
||||||
) : DbContext(options)
|
) : DbContext(options)
|
||||||
{
|
{
|
||||||
public DbSet<Notification.Notification> Notifications { get; set; } = null!;
|
public DbSet<Shared.Models.SnNotification> Notifications { get; set; } = null!;
|
||||||
public DbSet<PushSubscription> PushSubscriptions { get; set; } = null!;
|
public DbSet<SnNotificationPushSubscription> PushSubscriptions { get; set; } = null!;
|
||||||
|
|
||||||
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
|
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
|
||||||
{
|
{
|
||||||
|
@@ -1,6 +1,6 @@
|
|||||||
using System.Net.WebSockets;
|
using System.Net.WebSockets;
|
||||||
using DysonNetwork.Shared.Proto;
|
using DysonNetwork.Shared.Proto;
|
||||||
using WebSocketPacket = DysonNetwork.Shared.Data.WebSocketPacket;
|
using WebSocketPacket = DysonNetwork.Shared.Models.WebSocketPacket;
|
||||||
|
|
||||||
namespace DysonNetwork.Ring.Connection;
|
namespace DysonNetwork.Ring.Connection;
|
||||||
|
|
||||||
|
@@ -3,7 +3,7 @@ using DysonNetwork.Shared.Proto;
|
|||||||
using Microsoft.AspNetCore.Authorization;
|
using Microsoft.AspNetCore.Authorization;
|
||||||
using Microsoft.AspNetCore.Mvc;
|
using Microsoft.AspNetCore.Mvc;
|
||||||
using Swashbuckle.AspNetCore.Annotations;
|
using Swashbuckle.AspNetCore.Annotations;
|
||||||
using WebSocketPacket = DysonNetwork.Shared.Data.WebSocketPacket;
|
using WebSocketPacket = DysonNetwork.Shared.Models.WebSocketPacket;
|
||||||
|
|
||||||
namespace DysonNetwork.Ring.Connection;
|
namespace DysonNetwork.Ring.Connection;
|
||||||
|
|
||||||
|
@@ -1,10 +1,10 @@
|
|||||||
using System.Collections.Concurrent;
|
using System.Collections.Concurrent;
|
||||||
using System.Net.WebSockets;
|
using System.Net.WebSockets;
|
||||||
using DysonNetwork.Shared.Data;
|
using DysonNetwork.Shared.Models;
|
||||||
using DysonNetwork.Shared.Proto;
|
using DysonNetwork.Shared.Proto;
|
||||||
using DysonNetwork.Shared.Stream;
|
using DysonNetwork.Shared.Stream;
|
||||||
using NATS.Client.Core;
|
using NATS.Client.Core;
|
||||||
using WebSocketPacket = DysonNetwork.Shared.Data.WebSocketPacket;
|
using WebSocketPacket = DysonNetwork.Shared.Models.WebSocketPacket;
|
||||||
|
|
||||||
namespace DysonNetwork.Ring.Connection;
|
namespace DysonNetwork.Ring.Connection;
|
||||||
|
|
||||||
|
@@ -1,21 +0,0 @@
|
|||||||
using System.ComponentModel.DataAnnotations;
|
|
||||||
using System.ComponentModel.DataAnnotations.Schema;
|
|
||||||
using DysonNetwork.Shared.Data;
|
|
||||||
using NodaTime;
|
|
||||||
|
|
||||||
namespace DysonNetwork.Ring.Notification;
|
|
||||||
|
|
||||||
public class Notification : ModelBase
|
|
||||||
{
|
|
||||||
public Guid Id { get; set; } = Guid.NewGuid();
|
|
||||||
[MaxLength(1024)] public string Topic { get; set; } = null!;
|
|
||||||
[MaxLength(1024)] public string? Title { get; set; }
|
|
||||||
[MaxLength(2048)] public string? Subtitle { get; set; }
|
|
||||||
[MaxLength(4096)] public string? Content { get; set; }
|
|
||||||
[Column(TypeName = "jsonb")] public Dictionary<string, object?> Meta { get; set; } = new();
|
|
||||||
public int Priority { get; set; } = 10;
|
|
||||||
public Instant? ViewedAt { get; set; }
|
|
||||||
|
|
||||||
public Guid AccountId { get; set; }
|
|
||||||
}
|
|
||||||
|
|
@@ -1,5 +1,6 @@
|
|||||||
using System.ComponentModel.DataAnnotations;
|
using System.ComponentModel.DataAnnotations;
|
||||||
using DysonNetwork.Shared.Auth;
|
using DysonNetwork.Shared.Auth;
|
||||||
|
using DysonNetwork.Shared.Models;
|
||||||
using DysonNetwork.Shared.Proto;
|
using DysonNetwork.Shared.Proto;
|
||||||
using Microsoft.AspNetCore.Authorization;
|
using Microsoft.AspNetCore.Authorization;
|
||||||
using Microsoft.AspNetCore.Mvc;
|
using Microsoft.AspNetCore.Mvc;
|
||||||
@@ -78,7 +79,7 @@ public class NotificationController(
|
|||||||
|
|
||||||
[HttpPut("subscription")]
|
[HttpPut("subscription")]
|
||||||
[Authorize]
|
[Authorize]
|
||||||
public async Task<ActionResult<PushSubscription>>
|
public async Task<ActionResult<SnNotificationPushSubscription>>
|
||||||
SubscribeToPushNotification(
|
SubscribeToPushNotification(
|
||||||
[FromBody] PushNotificationSubscribeRequest request
|
[FromBody] PushNotificationSubscribeRequest request
|
||||||
)
|
)
|
||||||
|
@@ -2,10 +2,11 @@ using CorePush.Apple;
|
|||||||
using CorePush.Firebase;
|
using CorePush.Firebase;
|
||||||
using DysonNetwork.Ring.Connection;
|
using DysonNetwork.Ring.Connection;
|
||||||
using DysonNetwork.Ring.Services;
|
using DysonNetwork.Ring.Services;
|
||||||
|
using DysonNetwork.Shared.Models;
|
||||||
using DysonNetwork.Shared.Proto;
|
using DysonNetwork.Shared.Proto;
|
||||||
using Microsoft.EntityFrameworkCore;
|
using Microsoft.EntityFrameworkCore;
|
||||||
using NodaTime;
|
using NodaTime;
|
||||||
using WebSocketPacket = DysonNetwork.Shared.Data.WebSocketPacket;
|
using WebSocketPacket = DysonNetwork.Shared.Models.WebSocketPacket;
|
||||||
|
|
||||||
namespace DysonNetwork.Ring.Notification;
|
namespace DysonNetwork.Ring.Notification;
|
||||||
|
|
||||||
@@ -62,7 +63,7 @@ public class PushService
|
|||||||
.ExecuteDeleteAsync();
|
.ExecuteDeleteAsync();
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task<PushSubscription> SubscribeDevice(
|
public async Task<SnNotificationPushSubscription> SubscribeDevice(
|
||||||
string deviceId,
|
string deviceId,
|
||||||
string deviceToken,
|
string deviceToken,
|
||||||
PushProvider provider,
|
PushProvider provider,
|
||||||
@@ -90,7 +91,7 @@ public class PushService
|
|||||||
return existingSubscription;
|
return existingSubscription;
|
||||||
}
|
}
|
||||||
|
|
||||||
var subscription = new PushSubscription
|
var subscription = new SnNotificationPushSubscription
|
||||||
{
|
{
|
||||||
DeviceId = deviceId,
|
DeviceId = deviceId,
|
||||||
DeviceToken = deviceToken,
|
DeviceToken = deviceToken,
|
||||||
@@ -259,7 +260,7 @@ public class PushService
|
|||||||
await DeliverPushNotification(notification);
|
await DeliverPushNotification(notification);
|
||||||
}
|
}
|
||||||
|
|
||||||
private async Task SendPushNotificationAsync(PushSubscription subscription, Notification notification)
|
private async Task SendPushNotificationAsync(SnNotificationPushSubscription subscription, Notification notification)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user