From 75d6b7b4ef1d579abb4cee3dcce358853ae0c7fb Mon Sep 17 00:00:00 2001 From: Foqsz Date: Mon, 3 Nov 2025 11:19:35 -0300 Subject: [PATCH 1/7] feat: rename Music Use Cases --- .../Music/Update/IUpdateMusicUseCase.cs | 8 +++ .../Music/Update/UpdateMusicUseCase.cs | 61 +++++++++++++++++++ 2 files changed, 69 insertions(+) create mode 100644 src/Backend/MyMusicLibrary.Application/UseCases/Music/Update/IUpdateMusicUseCase.cs create mode 100644 src/Backend/MyMusicLibrary.Application/UseCases/Music/Update/UpdateMusicUseCase.cs diff --git a/src/Backend/MyMusicLibrary.Application/UseCases/Music/Update/IUpdateMusicUseCase.cs b/src/Backend/MyMusicLibrary.Application/UseCases/Music/Update/IUpdateMusicUseCase.cs new file mode 100644 index 0000000..84c8f04 --- /dev/null +++ b/src/Backend/MyMusicLibrary.Application/UseCases/Music/Update/IUpdateMusicUseCase.cs @@ -0,0 +1,8 @@ +using MyMusicLibrary.Communication.Request; +using MyMusicLibrary.Communication.Responses; + +namespace MyMusicLibrary.Application.UseCases.Music.Update; +public interface IUpdateMusicUseCase +{ + Task Execute(RequestUpdateMusic request); +} diff --git a/src/Backend/MyMusicLibrary.Application/UseCases/Music/Update/UpdateMusicUseCase.cs b/src/Backend/MyMusicLibrary.Application/UseCases/Music/Update/UpdateMusicUseCase.cs new file mode 100644 index 0000000..b0ba9a4 --- /dev/null +++ b/src/Backend/MyMusicLibrary.Application/UseCases/Music/Update/UpdateMusicUseCase.cs @@ -0,0 +1,61 @@ +using MyMusicLibrary.Communication.Request; +using MyMusicLibrary.Communication.Responses; +using MyMusicLibrary.Domain.Repositories.Music; +using MyMusicLibrary.Domain.Repositories.UnitOfWork; +using MyMusicLibrary.Domain.Services.LoggedUser; +using MyMusicLibrary.Domain.Services.Storage.Aws; +using MyMusicLibrary.Exceptions; +using MyMusicLibrary.Exceptions.ExceptionsBase; + +namespace MyMusicLibrary.Application.UseCases.Music.Update; +public class UpdateMusicUseCase : IUpdateMusicUseCase +{ + private readonly IMusicWriteOnlyRepository _musicWriteOnlyRepository; + private readonly ILoggedUser _loggedUser; + private readonly IMusicReadOnlyRepository _musicReadOnlyRepository; + private readonly IUnitOfWork _unitOfWork; + private readonly IS3Service _s3Service; + + public UpdateMusicUseCase(IMusicWriteOnlyRepository musicWriteOnlyRepository, + ILoggedUser loggedUser, + IMusicReadOnlyRepository musicReadOnlyRepository, + IUnitOfWork unitOfWork, + IS3Service s3Service) + { + _musicWriteOnlyRepository = musicWriteOnlyRepository; + _loggedUser = loggedUser; + _musicReadOnlyRepository = musicReadOnlyRepository; + _unitOfWork = unitOfWork; + _s3Service = s3Service; + } + + public async Task Execute(RequestUpdateMusic request) + { + var user = await _loggedUser.User(); + + var music = await _musicReadOnlyRepository.GetById(user, request.MusicId); + if (music is null) + throw new NotFoundException(ResourceMessagesException.MUSIC_EMPTY); + + var oldKey = music.MusicKey!; + var extension = Path.GetExtension(oldKey); + var folder = Path.GetDirectoryName(oldKey)?.Replace("\\", "/"); + var newKey = string.IsNullOrEmpty(folder) + ? $"{request.Name}{extension}" + : $"{folder}/{request.Name}{extension}"; + + await _s3Service.RenameFileAsync(oldKey, newKey); + + music.Name = request.Name; + music.MusicKey = newKey; + + await _musicWriteOnlyRepository.Update(user, music); + await _unitOfWork.Commit(); + + return new ResponseProfileMusicJson() + { + Name = music.Name + }; + } + +} From a39280542b8021c24ca5b5d8c98e99a7a164ae1c Mon Sep 17 00:00:00 2001 From: Foqsz Date: Mon, 3 Nov 2025 11:19:41 -0300 Subject: [PATCH 2/7] feat: DI --- .../MyMusicLibrary.Application/DependencyInjectionExtension.cs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/Backend/MyMusicLibrary.Application/DependencyInjectionExtension.cs b/src/Backend/MyMusicLibrary.Application/DependencyInjectionExtension.cs index 95d1f5a..64273f9 100644 --- a/src/Backend/MyMusicLibrary.Application/DependencyInjectionExtension.cs +++ b/src/Backend/MyMusicLibrary.Application/DependencyInjectionExtension.cs @@ -12,6 +12,7 @@ using MyMusicLibrary.Application.UseCases.Music.GetById; using MyMusicLibrary.Application.UseCases.Music.Register; using MyMusicLibrary.Application.UseCases.Music.Search; +using MyMusicLibrary.Application.UseCases.Music.Update; using MyMusicLibrary.Application.UseCases.Music.Upload; using MyMusicLibrary.Application.UseCases.Playlist.AddMusicToPlaylist; using MyMusicLibrary.Application.UseCases.Playlist.Create; @@ -78,5 +79,6 @@ private static void AddUseCases(IServiceCollection services) services.AddScoped(); services.AddScoped(); services.AddScoped(); + services.AddScoped(); } } From b6f35d1924ad3870c44e5c073fd4a4fbb58ae4f1 Mon Sep 17 00:00:00 2001 From: Foqsz Date: Mon, 3 Nov 2025 11:20:00 -0300 Subject: [PATCH 3/7] feat: S3 service implementado metodo de update. --- .../Services/Storage/Aws/IS3Service.cs | 1 + .../Services/Storage/Aws/S3Service.cs | 24 +++++++++++++++++++ 2 files changed, 25 insertions(+) diff --git a/src/Backend/MyMusicLibrary.Domain/Services/Storage/Aws/IS3Service.cs b/src/Backend/MyMusicLibrary.Domain/Services/Storage/Aws/IS3Service.cs index 7032fe5..829fc17 100644 --- a/src/Backend/MyMusicLibrary.Domain/Services/Storage/Aws/IS3Service.cs +++ b/src/Backend/MyMusicLibrary.Domain/Services/Storage/Aws/IS3Service.cs @@ -7,4 +7,5 @@ public interface IS3Service Task UploadFileAsync(IFormFile file); Task DeleteFile(string key); Task GetFileUrl(string key); + Task RenameFileAsync(string oldKey, string newKey); } diff --git a/src/Backend/MyMusicLibrary.Infrastructure/Services/Storage/Aws/S3Service.cs b/src/Backend/MyMusicLibrary.Infrastructure/Services/Storage/Aws/S3Service.cs index c2292cb..b0f26b2 100644 --- a/src/Backend/MyMusicLibrary.Infrastructure/Services/Storage/Aws/S3Service.cs +++ b/src/Backend/MyMusicLibrary.Infrastructure/Services/Storage/Aws/S3Service.cs @@ -73,4 +73,28 @@ public async Task GetFileUrl(string key) return await Task.FromResult(new S3UrlDto(url: url)); } + + public async Task RenameFileAsync(string oldKey, string newKey) + { + // Copia o arquivo existente para o novo nome + var copyRequest = new CopyObjectRequest + { + SourceBucket = bucketName, + SourceKey = oldKey, + DestinationBucket = bucketName, + DestinationKey = newKey + }; + + await _s3Client.CopyObjectAsync(copyRequest); + + // Remove o arquivo antigo + var deleteRequest = new DeleteObjectRequest + { + BucketName = bucketName, + Key = oldKey + }; + + await _s3Client.DeleteObjectAsync(deleteRequest); + } + } From 7db1c54550296c4d55b8b32fced4054dfc40067a Mon Sep 17 00:00:00 2001 From: Foqsz Date: Mon, 3 Nov 2025 11:20:08 -0300 Subject: [PATCH 4/7] feat: Controller --- .../MyMusicLibrary.API/Controllers/MusicController.cs | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/Backend/MyMusicLibrary.API/Controllers/MusicController.cs b/src/Backend/MyMusicLibrary.API/Controllers/MusicController.cs index 43c1868..b3fbe17 100644 --- a/src/Backend/MyMusicLibrary.API/Controllers/MusicController.cs +++ b/src/Backend/MyMusicLibrary.API/Controllers/MusicController.cs @@ -6,6 +6,7 @@ using MyMusicLibrary.Application.UseCases.Music.GetById; using MyMusicLibrary.Application.UseCases.Music.Register; using MyMusicLibrary.Application.UseCases.Music.Search; +using MyMusicLibrary.Application.UseCases.Music.Update; using MyMusicLibrary.Application.UseCases.Music.Upload; using MyMusicLibrary.Communication.Request; using MyMusicLibrary.Communication.Responses; @@ -105,4 +106,14 @@ public async Task Upload([FromServices] IUploadMusicUseCase useCa return BadRequest(ex.Message); } } + + [HttpPut("update")] + [ProducesResponseType(typeof(ResponseProfileMusicJson), StatusCodes.Status200OK)] + [ProducesResponseType(StatusCodes.Status400BadRequest)] + [ProducesResponseType(StatusCodes.Status404NotFound)] + public async Task Update([FromServices] IUpdateMusicUseCase useCase, [FromBody] RequestUpdateMusic request) + { + var result = await useCase.Execute(request); + return Ok(result); + } } From 4b0829f42f1777a6660598e3e0fcdc92f967e063 Mon Sep 17 00:00:00 2001 From: Foqsz Date: Mon, 3 Nov 2025 11:20:17 -0300 Subject: [PATCH 5/7] feat: repositorio --- .../Repositories/Music/IMusicWriteOnlyRepository.cs | 1 + .../Repositories/Music/MusicWriteOnlyRepository.cs | 12 ++++++++++++ 2 files changed, 13 insertions(+) diff --git a/src/Backend/MyMusicLibrary.Domain/Repositories/Music/IMusicWriteOnlyRepository.cs b/src/Backend/MyMusicLibrary.Domain/Repositories/Music/IMusicWriteOnlyRepository.cs index 3c0fefc..fbe595d 100644 --- a/src/Backend/MyMusicLibrary.Domain/Repositories/Music/IMusicWriteOnlyRepository.cs +++ b/src/Backend/MyMusicLibrary.Domain/Repositories/Music/IMusicWriteOnlyRepository.cs @@ -5,4 +5,5 @@ public interface IMusicWriteOnlyRepository Task Delete(long musicId); Task AddMusicFavorite(Entities.UserFavoritesMusic musicFavorite); Task UnfavoriteMusic(long musicId); + Task Update(Entities.User user, Entities.Music music); } diff --git a/src/Backend/MyMusicLibrary.Infrastructure/DataAccess/Repositories/Music/MusicWriteOnlyRepository.cs b/src/Backend/MyMusicLibrary.Infrastructure/DataAccess/Repositories/Music/MusicWriteOnlyRepository.cs index c8d56b6..2f4e5c8 100644 --- a/src/Backend/MyMusicLibrary.Infrastructure/DataAccess/Repositories/Music/MusicWriteOnlyRepository.cs +++ b/src/Backend/MyMusicLibrary.Infrastructure/DataAccess/Repositories/Music/MusicWriteOnlyRepository.cs @@ -37,4 +37,16 @@ public async Task UnfavoriteMusic(long musicId) _dbContext.UserFavoritesMusic.Remove(music!); } + + public async Task Update(Domain.Entities.User user, Domain.Entities.Music music) + { + var musicUpdate = await _dbContext.Music + .Where(m => m.Id == music.Id && m.UserId == user.Id) + .FirstOrDefaultAsync(); + + if (musicUpdate is null) + return; + + _dbContext.Music.Update(musicUpdate); + } } From 9dc362d40ca3959435eb1183aaab21d650cb7b91 Mon Sep 17 00:00:00 2001 From: Foqsz Date: Mon, 3 Nov 2025 11:20:24 -0300 Subject: [PATCH 6/7] feat: new request --- .../Request/RequestUpdateMusic.cs | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 src/Shared/MyMusicLibrary.Communication/Request/RequestUpdateMusic.cs diff --git a/src/Shared/MyMusicLibrary.Communication/Request/RequestUpdateMusic.cs b/src/Shared/MyMusicLibrary.Communication/Request/RequestUpdateMusic.cs new file mode 100644 index 0000000..8cdd61a --- /dev/null +++ b/src/Shared/MyMusicLibrary.Communication/Request/RequestUpdateMusic.cs @@ -0,0 +1,6 @@ +namespace MyMusicLibrary.Communication.Request; +public class RequestUpdateMusic +{ + public long MusicId { get; set; } + public string Name { get; set; } = string.Empty; +} From 37fabe1414914e158d9983baf3603dc9ddbe6221 Mon Sep 17 00:00:00 2001 From: Foqsz Date: Mon, 3 Nov 2025 11:20:44 -0300 Subject: [PATCH 7/7] feat: enable warningsAsErrors --- src/Backend/MyMusicLibrary.API/MyMusicLibrary.API.csproj | 1 + 1 file changed, 1 insertion(+) diff --git a/src/Backend/MyMusicLibrary.API/MyMusicLibrary.API.csproj b/src/Backend/MyMusicLibrary.API/MyMusicLibrary.API.csproj index eb13dc1..508da6f 100644 --- a/src/Backend/MyMusicLibrary.API/MyMusicLibrary.API.csproj +++ b/src/Backend/MyMusicLibrary.API/MyMusicLibrary.API.csproj @@ -5,6 +5,7 @@ enable enable false + true