JJ Colocate

This commit is contained in:
2025-06-30 14:23:20 -04:00
parent 360fa53439
commit 24abf5607f
77 changed files with 5700 additions and 5700 deletions

View File

@@ -1,98 +1,98 @@
using MongoDB.Bson;
using MongoDB.Bson.Serialization.Attributes;
namespace AobaCore.Models;
[BsonIgnoreExtraElements]
public class Media
{
[BsonId]
public ObjectId Id { get; set; }
public ObjectId MediaId { get; set; }
public string Filename { get; set; }
public MediaType MediaType { get; set; }
public string Ext { get; set; }
public int ViewCount { get; set; }
public ObjectId Owner { get; set; }
public DateTime UploadDate { get; set; }
public static readonly Dictionary<string, MediaType> KnownTypes = new()
{
{ ".jpg", MediaType.Image },
{ ".avif", MediaType.Image },
{ ".jpeg", MediaType.Image },
{ ".png", MediaType.Image },
{ ".apng", MediaType.Image },
{ ".webp", MediaType.Image },
{ ".ico", MediaType.Image },
{ ".gif", MediaType.Image },
{ ".mp3", MediaType.Audio },
{ ".flac", MediaType.Audio },
{ ".alac", MediaType.Audio },
{ ".mp4", MediaType.Video },
{ ".webm", MediaType.Video },
{ ".mov", MediaType.Video },
{ ".avi", MediaType.Video },
{ ".mkv", MediaType.Video },
{ ".txt", MediaType.Text },
{ ".log", MediaType.Text },
{ ".css", MediaType.Code },
{ ".cs", MediaType.Code },
{ ".cpp", MediaType.Code },
{ ".lua", MediaType.Code },
{ ".js", MediaType.Code },
{ ".htm", MediaType.Code },
{ ".html", MediaType.Code },
{ ".cshtml", MediaType.Code },
{ ".xml", MediaType.Code },
{ ".json", MediaType.Code },
{ ".py", MediaType.Code },
};
[BsonConstructor]
private Media()
{
Filename = string.Empty;
Ext = string.Empty;
}
public Media(ObjectId fileId, string filename, ObjectId owner)
{
MediaType = GetMediaType(filename);
Ext = Path.GetExtension(filename);
Filename = filename;
MediaId = fileId;
Owner = owner;
Id = ObjectId.GenerateNewId();
UploadDate = DateTime.UtcNow;
}
public string GetMediaUrl()
{
return this switch
{
//Media { MediaType: MediaType.Raw or MediaType.Text or MediaType.Code} => $"/i/dl/{MediaId}/{Filename}",
_ => $"/m/{MediaId}"
};
}
public static MediaType GetMediaType(string filename)
{
string ext = Path.GetExtension(filename);
if (KnownTypes.TryGetValue(ext, out MediaType mType))
return mType;
else
return MediaType.Raw;
}
}
public enum MediaType
{
Image,
Audio,
Video,
Text,
Code,
Raw
using MongoDB.Bson;
using MongoDB.Bson.Serialization.Attributes;
namespace AobaCore.Models;
[BsonIgnoreExtraElements]
public class Media
{
[BsonId]
public ObjectId Id { get; set; }
public ObjectId MediaId { get; set; }
public string Filename { get; set; }
public MediaType MediaType { get; set; }
public string Ext { get; set; }
public int ViewCount { get; set; }
public ObjectId Owner { get; set; }
public DateTime UploadDate { get; set; }
public static readonly Dictionary<string, MediaType> KnownTypes = new()
{
{ ".jpg", MediaType.Image },
{ ".avif", MediaType.Image },
{ ".jpeg", MediaType.Image },
{ ".png", MediaType.Image },
{ ".apng", MediaType.Image },
{ ".webp", MediaType.Image },
{ ".ico", MediaType.Image },
{ ".gif", MediaType.Image },
{ ".mp3", MediaType.Audio },
{ ".flac", MediaType.Audio },
{ ".alac", MediaType.Audio },
{ ".mp4", MediaType.Video },
{ ".webm", MediaType.Video },
{ ".mov", MediaType.Video },
{ ".avi", MediaType.Video },
{ ".mkv", MediaType.Video },
{ ".txt", MediaType.Text },
{ ".log", MediaType.Text },
{ ".css", MediaType.Code },
{ ".cs", MediaType.Code },
{ ".cpp", MediaType.Code },
{ ".lua", MediaType.Code },
{ ".js", MediaType.Code },
{ ".htm", MediaType.Code },
{ ".html", MediaType.Code },
{ ".cshtml", MediaType.Code },
{ ".xml", MediaType.Code },
{ ".json", MediaType.Code },
{ ".py", MediaType.Code },
};
[BsonConstructor]
private Media()
{
Filename = string.Empty;
Ext = string.Empty;
}
public Media(ObjectId fileId, string filename, ObjectId owner)
{
MediaType = GetMediaType(filename);
Ext = Path.GetExtension(filename);
Filename = filename;
MediaId = fileId;
Owner = owner;
Id = ObjectId.GenerateNewId();
UploadDate = DateTime.UtcNow;
}
public string GetMediaUrl()
{
return this switch
{
//Media { MediaType: MediaType.Raw or MediaType.Text or MediaType.Code} => $"/i/dl/{MediaId}/{Filename}",
_ => $"/m/{MediaId}"
};
}
public static MediaType GetMediaType(string filename)
{
string ext = Path.GetExtension(filename);
if (KnownTypes.TryGetValue(ext, out MediaType mType))
return mType;
else
return MediaType.Raw;
}
}
public enum MediaType
{
Image,
Audio,
Video,
Text,
Code,
Raw
}

View File

@@ -1,19 +1,19 @@
using MongoDB.Bson;
using MongoDB.Bson.Serialization.Attributes;
namespace AobaCore.Models;
public record MediaThumbnail
{
[BsonId]
public required ObjectId Id { get; init; }
public Dictionary<ThumbnailSize, ObjectId> Sizes { get; set; } = [];
}
public enum ThumbnailSize
{
Small = 128,
Medium = 256,
Large = 512,
ExtraLarge = 1024
using MongoDB.Bson;
using MongoDB.Bson.Serialization.Attributes;
namespace AobaCore.Models;
public record MediaThumbnail
{
[BsonId]
public required ObjectId Id { get; init; }
public Dictionary<ThumbnailSize, ObjectId> Sizes { get; set; } = [];
}
public enum ThumbnailSize
{
Small = 128,
Medium = 256,
Large = 512,
ExtraLarge = 1024
}

View File

@@ -1,18 +1,18 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace AobaCore.Models;
public class PagedResult<T>(List<T> items, int page, int pageSize, long totalItems)
{
public List<T> Items { get; set; } = items;
public int Page { get; set; } = page;
public int PageSize { get; set; } = pageSize;
public long TotalItems { get; set; } = totalItems;
public long TotalPages { get; set; } = totalItems / pageSize;
public string? Query { get; set; }
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace AobaCore.Models;
public class PagedResult<T>(List<T> items, int page, int pageSize, long totalItems)
{
public List<T> Items { get; set; } = items;
public int Page { get; set; } = page;
public int PageSize { get; set; } = pageSize;
public long TotalItems { get; set; } = totalItems;
public long TotalPages { get; set; } = totalItems / pageSize;
public string? Query { get; set; }
}

View File

@@ -1,36 +1,36 @@
using Microsoft.IdentityModel.Tokens;
using MongoDB.Bson;
using MongoDB.Bson.Serialization.Attributes;
using System;
using System.Security.Claims;
using System.Text;
using System.Threading.Tasks;
namespace AobaCore.Models;
public class User
{
[BsonId]
public ObjectId Id { get; set; }
public required string Username { get; set; }
public required string PasswordHash { get; set; }
public required string Role { get; set; }
public bool IsArgon { get; set; }
public ObjectId[] ApiKeys { get; set; } = [];
public List<ObjectId> RegTokens { get; set; } = [];
public ClaimsIdentity GetIdentity()
{
var id = new ClaimsIdentity(new[]
{
new Claim(ClaimTypes.NameIdentifier, Id.ToString()),
new Claim(ClaimTypes.Name, Username),
});
if (Role != null)
id.AddClaim(new Claim(ClaimTypes.Role, Role));
return id;
}
}
using Microsoft.IdentityModel.Tokens;
using MongoDB.Bson;
using MongoDB.Bson.Serialization.Attributes;
using System;
using System.Security.Claims;
using System.Text;
using System.Threading.Tasks;
namespace AobaCore.Models;
public class User
{
[BsonId]
public ObjectId Id { get; set; }
public required string Username { get; set; }
public required string PasswordHash { get; set; }
public required string Role { get; set; }
public bool IsArgon { get; set; }
public ObjectId[] ApiKeys { get; set; } = [];
public List<ObjectId> RegTokens { get; set; } = [];
public ClaimsIdentity GetIdentity()
{
var id = new ClaimsIdentity(new[]
{
new Claim(ClaimTypes.NameIdentifier, Id.ToString()),
new Claim(ClaimTypes.Name, Username),
});
if (Role != null)
id.AddClaim(new Claim(ClaimTypes.Role, Role));
return id;
}
}