using DysonNetwork.Shared.Proto;
using Google.Protobuf;
namespace DysonNetwork.Shared.Data;
public enum ContentSensitiveMark
{
Language,
SexualContent,
Violence,
Profanity,
HateSpeech,
Racism,
AdultContent,
DrugAbuse,
AlcoholAbuse,
Gambling,
SelfHarm,
ChildAbuse,
Other
}
///
/// The class that used in jsonb columns which referenced the cloud file.
/// The aim of this class is to store some properties that won't change to a file to reduce the database load.
///
public class CloudFileReferenceObject : ModelBase, ICloudFile
{
public string Id { get; set; } = null!;
public string Name { get; set; } = string.Empty;
public Dictionary FileMeta { get; set; } = null!;
public Dictionary UserMeta { get; set; } = null!;
public string? MimeType { get; set; }
public string? Hash { get; set; }
public long Size { get; set; }
public bool HasCompression { get; set; } = false;
public static CloudFileReferenceObject FromProtoValue(Proto.CloudFile proto)
{
return new CloudFileReferenceObject
{
Id = proto.Id,
Name = proto.Name,
FileMeta = System.Text.Json.JsonSerializer.Deserialize>(
proto.FileMeta.ToStringUtf8(),
GrpcTypeHelper.SystemTextSerializerOptions
) ?? [],
UserMeta = System.Text.Json.JsonSerializer.Deserialize>(
proto.UserMeta.ToStringUtf8(),
GrpcTypeHelper.SystemTextSerializerOptions
) ?? [],
MimeType = proto.MimeType,
Hash = proto.Hash,
Size = proto.Size,
HasCompression = proto.HasCompression
};
}
///
/// Converts the current object to its protobuf representation
///
public CloudFile ToProtoValue()
{
var proto = new CloudFile
{
Id = Id,
Name = Name,
MimeType = MimeType ?? string.Empty,
Hash = Hash ?? string.Empty,
Size = Size,
HasCompression = HasCompression,
ContentType = MimeType ?? string.Empty,
Url = string.Empty // This should be set by the caller if needed
};
// Convert file metadata
proto.FileMeta = ByteString.CopyFromUtf8(
System.Text.Json.JsonSerializer.Serialize(FileMeta, GrpcTypeHelper.SystemTextSerializerOptions)
);
// Convert user metadata
proto.UserMeta = ByteString.CopyFromUtf8(
System.Text.Json.JsonSerializer.Serialize(UserMeta, GrpcTypeHelper.SystemTextSerializerOptions)
);
return proto;
}
}