using System.Security; using RunnersMeet.Server.Domain; namespace RunnersMeet.Server.Persistence; public class UpdateTrackCommand : IRequestHandler { private readonly IDatabase _database; public UpdateTrackCommand(IDatabase database) { _database = database; } public Track Handle(TrackUpdate request) { var dbTrack = _database.Tracks.FindById(request.Track.TrackId); if (dbTrack == null) { throw new ArgumentException($"Track with OID {request.Track.TrackId} does not exist", nameof(request.Track)); } if (dbTrack.Owner.UserId != request.Owner) { throw new SecurityException("Trying to modify a track owned by somebody else"); } dbTrack.DisplayName = request.Track.DisplayName; _database.Tracks.Update(dbTrack); return dbTrack; } }