Initial commit carried over from private repo. This is V2.
All checks were successful
Build and Push Docker Image / build (push) Successful in 1m3s
Build and Push Docker Image / docker (push) Successful in 43s

This commit is contained in:
2025-07-04 21:24:12 +02:00
parent 7715816029
commit 4393977389
96 changed files with 3223 additions and 0 deletions

View File

@ -0,0 +1,11 @@
namespace MessengerApi.Db.Contracts.Entities
{
public interface IEntity
{
Guid Id { get; }
}
public interface IEntity<T> : IEntity where T : class, IEntity
{
}
}

View File

@ -0,0 +1,25 @@
using MessengerApi.Db.Contracts.Entities;
namespace MessengerApi.Db.Entities
{
public class Message : IEntity<Message>
{
public Guid Id { get; set; }
public DateTime CreatedUtc { get; set; }
public Guid FromId { get; set; }
public Guid ToId { get; set; }
public bool IsDelivered { get; set; }
public bool IsAcknowledged { get; set; }
public string PayloadType { get; set; }
public string Payload { get; set; }
public int? PayloadLifespanInSeconds { get; set; }
}
}

View File

@ -0,0 +1,15 @@
using MessengerApi.Db.Contracts.Entities;
namespace MessengerApi.Db.Entities
{
public class User : IEntity<User>
{
public Guid Id { get; set; }
public Guid ApiKey { get; set; }
public string Name { get; set; }
public bool IsEnabled { get; set; }
}
}

View File

@ -0,0 +1,16 @@
using MessengerApi.Db.Contracts.Entities;
namespace MessengerApi.Db.Entities
{
/// <summary>
/// Describes allowed message route (who can message whom).
/// </summary>
public class UserRoute : IEntity<UserRoute>
{
public Guid Id { get; set; }
public User From { get; set; }
public User To { get; set; }
}
}

View File

@ -0,0 +1,9 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net9.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>disable</Nullable>
</PropertyGroup>
</Project>

View File

@ -0,0 +1,9 @@
using MessengerApi.Db.Entities;
namespace MessengerApi.Db.Contracts.Repositories
{
public interface IMessageRepository : IRepository<Message>
{
IEnumerable<Message> GetPendingMessages(User user);
}
}

View File

@ -0,0 +1,15 @@
using MessengerApi.Db.Contracts.Entities;
namespace MessengerApi.Db.Contracts.Repositories
{
public interface IRepository
{
}
public interface IRepository<T> : IRepository where T : class, IEntity<T>
{
void Add(T entity);
T GetById(Guid id);
}
}

View File

@ -0,0 +1,9 @@
using MessengerApi.Db.Entities;
namespace MessengerApi.Db.Contracts.Repositories
{
public interface IUserRepository : IRepository<User>
{
User SingleByApiKeyAndEnabled(Guid id, bool enabled);
}
}

View File

@ -0,0 +1,17 @@
using MessengerApi.Db.Entities;
namespace MessengerApi.Db.Contracts.Repositories
{
public interface IUserRouteRepository:IRepository<UserRoute>
{
/// <summary>
/// Returns all routes for given user.
/// </summary>
IEnumerable<UserRoute> GetAllByUser(User sender);
/// <summary>
/// Returns routes where given user is sender.
/// </summary>
IEnumerable<UserRoute> GetByFrom(User user);
}
}