/
bluesman66
/
clean-arch-example
Обзор
Документация
Войти
/
bluesman66
/
clean-arch-example
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
dev
src/GymManagement.Domain/Subscriptions/Subscription.cs
83 строки
2 KB
paklin
Entities
19 янв 2025, 19:25
19 янв 2025, 19:25
8cf5f77
Код
Авторство
О чём код?
namespace GymManagement.Domain.Subscriptions; using ErrorOr; using Throw; public class Subscription { private readonly List<Guid> _gymIds = new(); private readonly int _maxGyms; public Guid Id { get; private set; } public SubscriptionType SubscriptionType { get; private set; } = null!; public Guid AdminId { get; } public Subscription( SubscriptionType subscriptionType, Guid adminId, Guid? id = null) { SubscriptionType = subscriptionType; AdminId = adminId; Id = id ?? Guid.NewGuid(); _maxGyms = GetMaxGyms(); } public ErrorOr<Success> AddGym(Gym gym) { _gymIds.Throw().IfContains(gym.Id); if (_gymIds.Count >= _maxGyms) { return SubscriptionErrors.CannotHaveMoreGymsThanTheSubscriptionAllows; } _gymIds.Add(gym.Id); return Result.Success; } public int GetMaxGyms() => SubscriptionType.Name switch { nameof(SubscriptionType.Free) => 1, nameof(SubscriptionType.Starter) => 1, nameof(SubscriptionType.Pro) => 3, _ => throw new InvalidOperationException() }; public int GetMaxRooms() => SubscriptionType.Name switch { nameof(SubscriptionType.Free) => 1, nameof(SubscriptionType.Starter) => 3, nameof(SubscriptionType.Pro) => int.MaxValue, _ => throw new InvalidOperationException() }; public int GetMaxDailySessions() => SubscriptionType.Name switch { nameof(SubscriptionType.Free) => 4, nameof(SubscriptionType.Starter) => int.MaxValue, nameof(SubscriptionType.Pro) => int.MaxValue, _ => throw new InvalidOperationException() }; public bool HasGym(Guid gymId) { return _gymIds.Contains(gymId); } public void RemoveGym(Guid gymId) { _gymIds.Throw().IfNotContains(gymId); _gymIds.Remove(gymId); } private Subscription() { } }