mirror of
https://github.com/JogmansonReal/Radicade.git
synced 2026-10-26 07:29:00 -07:00
129 lines
4.1 KiB
C#
129 lines
4.1 KiB
C#
using Microsoft.EntityFrameworkCore;
|
|
using System.ComponentModel.DataAnnotations;
|
|
using System.ComponentModel.DataAnnotations.Schema;
|
|
using System.Text.Json.Serialization;
|
|
using RadicadeServer.DB;
|
|
using RadicadeServer.RecNet.Enums.Inventions;
|
|
|
|
namespace RadicadeServer.RecNet.Inventions
|
|
{
|
|
public class InventionDB
|
|
{
|
|
[Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
|
|
public long InventionId { get; set; }
|
|
public string ReplicationId { get; set; } = "";
|
|
public long CreatorPlayerId { get; set; } = 1;
|
|
|
|
public string Name { get; set; } = "";
|
|
public string Description { get; set; } = "";
|
|
public string ImageName { get; set; } = DBConfig.DefaultRoomImage;
|
|
|
|
public int CurrentVersionNumber { get; set; } = 0;
|
|
|
|
public DateTime ModifiedAt { get; set; } = DateTime.Now;
|
|
public DateTime CreatedAt { get; set; } = DateTime.Now;
|
|
|
|
public int NumPlayersHaveUsedInRoom { get; set; } = 0;
|
|
public int NumDownloads { get; set; } = 0;
|
|
public int CheerCount { get; set; } = 0;
|
|
|
|
public InventionRole CreatorPermission { get; set; } = InventionRole.Unlimited;
|
|
public InventionRole GeneralPermission { get; set; } = InventionRole.Unassigned;
|
|
|
|
public bool IsAGInvention { get; set; } = false;
|
|
public bool IsCertifiedInvention { get; set; } = false;
|
|
public bool IsPublished { get; set; } = false;
|
|
|
|
public bool AllowTrial { get; set; } = false;
|
|
public bool HideFromPlayer { get; set; } = false;
|
|
|
|
public int? Price { get; set; } = 0;
|
|
|
|
public string BlobName { get; set; } = "";
|
|
public int InstantiationCost { get; set; } = 0;
|
|
|
|
public int LightsCost { get; set; } = 0;
|
|
public int AICost { get; set; } = 0;
|
|
public int ChipsCost { get; set; } = 0;
|
|
public int CloudVariablesCost { get; set; } = 0;
|
|
|
|
public long RoomOrigin { get; set; } = -1;
|
|
public string Tags { get; set; } = string.Empty;
|
|
|
|
public Invention ToInvention()
|
|
{
|
|
return new Invention
|
|
{
|
|
InventionId = InventionId,
|
|
CreationRoomId = RoomOrigin >= 0 ? RoomOrigin : 0,
|
|
ReplicationId = ReplicationId,
|
|
CreatorPlayerId = CreatorPlayerId,
|
|
Name = Name,
|
|
Description = Description,
|
|
ImageName = ImageName,
|
|
CurrentVersionNumber = CurrentVersionNumber,
|
|
ModifiedAt = ModifiedAt,
|
|
CreatedAt = CreatedAt,
|
|
NumPlayersHaveUsedInRoom = NumPlayersHaveUsedInRoom,
|
|
NumDownloads = NumDownloads,
|
|
CheerCount = CheerCount,
|
|
CreatorPermission = CreatorPermission,
|
|
GeneralPermission = GeneralPermission,
|
|
IsAGInvention = IsAGInvention,
|
|
IsCertifiedInvention = IsCertifiedInvention,
|
|
IsPublished = IsPublished,
|
|
AllowTrial = AllowTrial,
|
|
HideFromPlayer = HideFromPlayer,
|
|
Price = Price is > 0 ? Price : null
|
|
};
|
|
}
|
|
public InventionVersion ToVersion()
|
|
{
|
|
return new InventionVersion
|
|
{
|
|
InventionId = InventionId,
|
|
ReplicationId = ReplicationId,
|
|
|
|
BlobName = BlobName,
|
|
|
|
InstantiationCost = InstantiationCost,
|
|
LightsCost = LightsCost,
|
|
ChipsCost = ChipsCost,
|
|
CloudVariablesCost = CloudVariablesCost,
|
|
|
|
VersionNumber = CurrentVersionNumber,
|
|
};
|
|
}
|
|
public async Task<FullInvention> ToFullInvention(RecDBContext ctx)
|
|
{
|
|
var full = new FullInvention();
|
|
full.Status = InventionStatus.Success;
|
|
full.Invention = ToInvention();
|
|
full.InventionVersion = await ctx.GetInventionVersion(CurrentVersionNumber, InventionId);
|
|
return full;
|
|
}
|
|
public async Task<FullInvention> ToFullInvention(RecDBContext ctx, int version)
|
|
{
|
|
var full = new FullInvention();
|
|
full.Status = InventionStatus.Success;
|
|
full.Invention = ToInvention();
|
|
full.InventionVersion = await ctx.GetInventionVersion(version, InventionId);
|
|
return full;
|
|
}
|
|
}
|
|
|
|
public static class InventionGetter
|
|
{
|
|
public static async Task<InventionVersion?> GetLatestInventionVersion(this RecDBContext ctx, long inventionId)
|
|
{
|
|
var ver = await ctx.InventionVersions.LastOrDefaultAsync(x => x.InventionId == inventionId);
|
|
return ver;
|
|
}
|
|
public static async Task<InventionVersion?> GetInventionVersion(this RecDBContext ctx, int version, long inventionId)
|
|
{
|
|
var ver = await ctx.InventionVersions.FirstOrDefaultAsync(x => x.InventionId == inventionId && x.VersionNumber == version);
|
|
return ver;
|
|
}
|
|
}
|
|
}
|