-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
0f12569
commit 72e37ea
Showing
14 changed files
with
418 additions
and
1 deletion.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,87 @@ | ||
using Microsoft.AspNetCore.Mvc; | ||
using OpenAdm.Application.Dtos.LojaParceira; | ||
using OpenAdm.Application.Interfaces; | ||
using OpenAdm.Infra.Paginacao; | ||
|
||
namespace OpenAdm.Api.Controllers; | ||
|
||
[ApiController] | ||
[Route("lojas-parceiras")] | ||
public class LojasParceirasController : ControllerBaseApi | ||
{ | ||
private readonly ILojasParceirasService _lojasParceirasService; | ||
|
||
public LojasParceirasController(ILojasParceirasService lojasParceirasService) | ||
{ | ||
_lojasParceirasService = lojasParceirasService; | ||
} | ||
|
||
[HttpGet("paginacao")] | ||
public async Task<IActionResult> Paginacao([FromQuery] PaginacaoLojasParceirasDto paginacaoLojasParceirasDto) | ||
{ | ||
try | ||
{ | ||
var paginacao = await _lojasParceirasService.GetPaginacaoAsync(paginacaoLojasParceirasDto); | ||
return Ok(paginacao); | ||
} | ||
catch (Exception ex) | ||
{ | ||
return await HandleErrorAsync(ex); | ||
} | ||
} | ||
|
||
[HttpPost("create")] | ||
public async Task<IActionResult> Create(CreateLojaParceiraDto createLojaParceiraDto) | ||
{ | ||
try | ||
{ | ||
var lojaParceiraViewModel = await _lojasParceirasService.CreateLojaParceiraAsync(createLojaParceiraDto); | ||
return Ok(lojaParceiraViewModel); | ||
} | ||
catch (Exception ex) | ||
{ | ||
return await HandleErrorAsync(ex); | ||
} | ||
} | ||
|
||
[HttpPut("update")] | ||
public async Task<IActionResult> Update(UpdateLojaParceiraDto updateLojaParceiraDto) | ||
{ | ||
try | ||
{ | ||
var lojaParceiraViewModel = await _lojasParceirasService.UpdateLojaParceiraAsync(updateLojaParceiraDto); | ||
return Ok(lojaParceiraViewModel); | ||
} | ||
catch (Exception ex) | ||
{ | ||
return await HandleErrorAsync(ex); | ||
} | ||
} | ||
|
||
[HttpGet("get-loja")] | ||
public async Task<IActionResult> GetLoja([FromQuery] Guid id) | ||
{ | ||
try | ||
{ | ||
var lojaParceiraViewModel = await _lojasParceirasService.GetLojasParceirasViewModelAsync(id); | ||
return Ok(lojaParceiraViewModel); | ||
} | ||
catch (Exception ex) | ||
{ | ||
return await HandleErrorAsync(ex); | ||
} | ||
} | ||
[HttpDelete("delete")] | ||
public async Task<IActionResult> DeleteLoja([FromQuery] Guid id) | ||
{ | ||
try | ||
{ | ||
await _lojasParceirasService.DeleteLojaParceiraAsync(id); | ||
return Ok(); | ||
} | ||
catch (Exception ex) | ||
{ | ||
return await HandleErrorAsync(ex); | ||
} | ||
} | ||
} |
39 changes: 39 additions & 0 deletions
39
OpenAdm.Application/Dtos/LojaParceira/CreateLojaParceiraDto.cs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,39 @@ | ||
using Domain.Pkg.Entities; | ||
using System.ComponentModel.DataAnnotations; | ||
|
||
namespace OpenAdm.Application.Dtos.LojaParceira; | ||
|
||
public class CreateLojaParceiraDto | ||
{ | ||
[Required] | ||
[MaxLength(255)] | ||
public string Nome { get; set; } = string.Empty; | ||
|
||
[MaxLength(500)] | ||
public string? Instagram { get; set; } | ||
[MaxLength(500)] | ||
public string? Facebook { get; set; } | ||
[MaxLength(500)] | ||
public string? Endereco { get; set; } | ||
[MaxLength(20)] | ||
public string? Contato { get; set; } | ||
public string? Foto { get; set; } | ||
|
||
public LojasParceiras ToEntity(string? nomeFoto) | ||
{ | ||
var date = DateTime.Now; | ||
|
||
return new LojasParceiras( | ||
Guid.NewGuid(), | ||
date, | ||
date, | ||
0, | ||
Nome, | ||
nomeFoto, | ||
Foto, | ||
Instagram, | ||
Facebook, | ||
Endereco, | ||
Contato); | ||
} | ||
} |
21 changes: 21 additions & 0 deletions
21
OpenAdm.Application/Dtos/LojaParceira/UpdateLojaParceiraDto.cs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,21 @@ | ||
using System.ComponentModel.DataAnnotations; | ||
|
||
namespace OpenAdm.Application.Dtos.LojaParceira; | ||
|
||
public class UpdateLojaParceiraDto | ||
{ | ||
public Guid Id { get; set; } | ||
[Required] | ||
[MaxLength(255)] | ||
public string Nome { get; set; } = string.Empty; | ||
|
||
[MaxLength(500)] | ||
public string? Instagram { get; set; } | ||
[MaxLength(500)] | ||
public string? Facebook { get; set; } | ||
[MaxLength(500)] | ||
public string? Endereco { get; set; } | ||
[MaxLength(20)] | ||
public string? Contato { get; set; } | ||
public string? Foto { get; set; } | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,15 @@ | ||
using OpenAdm.Application.Dtos.LojaParceira; | ||
using OpenAdm.Application.Models.LojasParceira; | ||
using OpenAdm.Domain.Model; | ||
using OpenAdm.Infra.Paginacao; | ||
|
||
namespace OpenAdm.Application.Interfaces; | ||
|
||
public interface ILojasParceirasService | ||
{ | ||
Task<PaginacaoViewModel<LojasParceirasViewModel>> GetPaginacaoAsync(PaginacaoLojasParceirasDto paginacaoLojasParceirasDto); | ||
Task<LojasParceirasViewModel> GetLojasParceirasViewModelAsync(Guid id); | ||
Task<LojasParceirasViewModel> CreateLojaParceiraAsync(CreateLojaParceiraDto createLojaParceiraDto); | ||
Task<LojasParceirasViewModel> UpdateLojaParceiraAsync(UpdateLojaParceiraDto updateLojaParceiraDto); | ||
Task DeleteLojaParceiraAsync(Guid id); | ||
} |
29 changes: 29 additions & 0 deletions
29
OpenAdm.Application/Models/LojasParceira/LojasParceirasViewModel.cs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,29 @@ | ||
using Domain.Pkg.Entities; | ||
|
||
namespace OpenAdm.Application.Models.LojasParceira; | ||
|
||
public class LojasParceirasViewModel : BaseModel | ||
{ | ||
public string Nome { get; set; } = string.Empty; | ||
public string? Foto { get; set; } | ||
public string? Instagram { get; set; } | ||
public string? Facebook { get; set; } | ||
public string? Endereco { get; set; } | ||
public string? Contato { get; set; } | ||
|
||
public LojasParceirasViewModel ToModel(LojasParceiras lojasParceiras) | ||
{ | ||
Id = lojasParceiras.Id; | ||
DataDeAtualizacao = lojasParceiras.DataDeAtualizacao; | ||
Numero = lojasParceiras.Numero; | ||
DataDeCriacao = lojasParceiras.DataDeCriacao; | ||
Foto = lojasParceiras.Foto; | ||
Instagram = lojasParceiras.Instagram; | ||
Facebook = lojasParceiras.Facebook; | ||
Endereco = lojasParceiras.Endereco; | ||
Contato = lojasParceiras.Contato; | ||
Nome = lojasParceiras.Nome; | ||
|
||
return this; | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,115 @@ | ||
using Domain.Pkg.Entities; | ||
using Domain.Pkg.Errors; | ||
using Domain.Pkg.Exceptions; | ||
using OpenAdm.Application.Dtos.LojaParceira; | ||
using OpenAdm.Application.Interfaces; | ||
using OpenAdm.Application.Models.LojasParceira; | ||
using OpenAdm.Domain.Interfaces; | ||
using OpenAdm.Domain.Model; | ||
using OpenAdm.Infra.Azure.Interfaces; | ||
using OpenAdm.Infra.Paginacao; | ||
|
||
namespace OpenAdm.Application.Services; | ||
|
||
public class LojasParceirasService : ILojasParceirasService | ||
{ | ||
private readonly ILojasParceirasRepository _lojasParceirasRepository; | ||
private readonly IUploadImageBlobClient _uploadImageBlobClient; | ||
|
||
public LojasParceirasService(ILojasParceirasRepository lojasParceirasRepository, IUploadImageBlobClient uploadImageBlobClient) | ||
{ | ||
_lojasParceirasRepository = lojasParceirasRepository; | ||
_uploadImageBlobClient = uploadImageBlobClient; | ||
} | ||
|
||
public async Task<LojasParceirasViewModel> CreateLojaParceiraAsync(CreateLojaParceiraDto createLojaParceiraDto) | ||
{ | ||
var nomeFoto = string.Empty; | ||
if (!string.IsNullOrWhiteSpace(createLojaParceiraDto.Foto)) | ||
{ | ||
nomeFoto = $"{Guid.NewGuid()}.jpg"; | ||
createLojaParceiraDto.Foto = await _uploadImageBlobClient.UploadImageAsync(createLojaParceiraDto.Foto, nomeFoto); | ||
} | ||
|
||
var lojaParceira = createLojaParceiraDto.ToEntity(nomeFoto); | ||
|
||
await _lojasParceirasRepository.AddAsync(lojaParceira); | ||
|
||
return new LojasParceirasViewModel().ToModel(lojaParceira); | ||
} | ||
|
||
public async Task DeleteLojaParceiraAsync(Guid id) | ||
{ | ||
var lojaParceira = await GetLojaAsync(id); | ||
|
||
if (!string.IsNullOrWhiteSpace(lojaParceira.NomeFoto)) | ||
{ | ||
await _uploadImageBlobClient.DeleteImageAsync(lojaParceira.NomeFoto); | ||
} | ||
|
||
await _lojasParceirasRepository.DeleteAsync(lojaParceira); | ||
} | ||
|
||
public async Task<LojasParceirasViewModel> GetLojasParceirasViewModelAsync(Guid id) | ||
{ | ||
var lojaParceira = await GetLojaAsync(id); | ||
|
||
return new LojasParceirasViewModel().ToModel(lojaParceira); | ||
} | ||
|
||
public async Task<PaginacaoViewModel<LojasParceirasViewModel>> GetPaginacaoAsync(PaginacaoLojasParceirasDto paginacaoLojasParceirasDto) | ||
{ | ||
var paginacao = await _lojasParceirasRepository.GetPaginacaoLojasParceirasAsync(paginacaoLojasParceirasDto); | ||
|
||
return new PaginacaoViewModel<LojasParceirasViewModel>() | ||
{ | ||
TotalPage = paginacao.TotalPage, | ||
Values = paginacao | ||
.Values | ||
.Select(x => | ||
new LojasParceirasViewModel().ToModel(x)) | ||
.ToList() | ||
}; | ||
} | ||
|
||
public async Task<LojasParceirasViewModel> UpdateLojaParceiraAsync(UpdateLojaParceiraDto updateLojaParceiraDto) | ||
{ | ||
var lojaParceira = await GetLojaAsync(updateLojaParceiraDto.Id); | ||
|
||
var foto = lojaParceira.Foto; | ||
var nomeFoto = lojaParceira.NomeFoto; | ||
|
||
if(!string.IsNullOrWhiteSpace(updateLojaParceiraDto.Foto) && !updateLojaParceiraDto.Foto.StartsWith("https://")) | ||
{ | ||
if (!string.IsNullOrWhiteSpace(nomeFoto)) | ||
{ | ||
var resultDeleteFoto = await _uploadImageBlobClient.DeleteImageAsync(nomeFoto); | ||
if (!resultDeleteFoto) | ||
throw new ExceptionApi("Não foi possível excluir a foto da loja, tente novamente mais tarde, ou entre em contato com o suporte!"); | ||
|
||
nomeFoto = $"{Guid.NewGuid()}.jpg"; | ||
|
||
foto = await _uploadImageBlobClient.UploadImageAsync(updateLojaParceiraDto.Foto, nomeFoto); | ||
} | ||
} | ||
|
||
lojaParceira.Update( | ||
updateLojaParceiraDto.Nome, | ||
nomeFoto, | ||
foto, | ||
updateLojaParceiraDto.Instagram, | ||
updateLojaParceiraDto.Facebook, | ||
updateLojaParceiraDto.Endereco, | ||
updateLojaParceiraDto.Contato); | ||
|
||
await _lojasParceirasRepository.UpdateAsync(lojaParceira); | ||
|
||
return new LojasParceirasViewModel().ToModel(lojaParceira); | ||
} | ||
|
||
private async Task<LojasParceiras> GetLojaAsync(Guid id) | ||
{ | ||
return await _lojasParceirasRepository.GetLojaParceiraByIdAsync(id) | ||
?? throw new ExceptionApi(CodigoErrors.RegistroNotFound); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,10 @@ | ||
using Domain.Pkg.Entities; | ||
using OpenAdm.Domain.Model; | ||
|
||
namespace OpenAdm.Domain.Interfaces; | ||
|
||
public interface ILojasParceirasRepository : IGenericRepository<LojasParceiras> | ||
{ | ||
Task<PaginacaoViewModel<LojasParceiras>> GetPaginacaoLojasParceirasAsync(FilterModel<LojasParceiras> filterModel); | ||
Task<LojasParceiras?> GetLojaParceiraByIdAsync(Guid id); | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
38 changes: 38 additions & 0 deletions
38
OpenAdm.Infra/EntityConfiguration/LojasParceirasConfiguration.cs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,38 @@ | ||
using Domain.Pkg.Entities; | ||
using Microsoft.EntityFrameworkCore; | ||
using Microsoft.EntityFrameworkCore.Metadata.Builders; | ||
|
||
namespace OpenAdm.Infra.EntityConfiguration; | ||
|
||
public class LojasParceirasConfiguration : IEntityTypeConfiguration<LojasParceiras> | ||
{ | ||
public void Configure(EntityTypeBuilder<LojasParceiras> builder) | ||
{ | ||
builder.HasKey(x => x.Id); | ||
builder.Property(x => x.DataDeCriacao) | ||
.IsRequired() | ||
.ValueGeneratedOnAdd() | ||
.HasDefaultValueSql("now()"); | ||
builder.Property(x => x.DataDeAtualizacao) | ||
.IsRequired() | ||
.ValueGeneratedOnAddOrUpdate() | ||
.HasDefaultValueSql("now()"); | ||
builder.Property(x => x.Numero) | ||
.ValueGeneratedOnAdd(); | ||
builder.Property(x => x.NomeFoto) | ||
.HasMaxLength(500); | ||
builder.Property(x => x.Foto) | ||
.HasMaxLength(500); | ||
builder.Property(x => x.Instagram) | ||
.HasMaxLength(500); | ||
builder.Property(x => x.Facebook) | ||
.HasMaxLength(500); | ||
builder.Property(x => x.Endereco) | ||
.HasMaxLength(500); | ||
builder.Property(x => x.Contato) | ||
.HasMaxLength(20); | ||
builder.Property(x => x.Nome) | ||
.IsRequired() | ||
.HasMaxLength(255); | ||
} | ||
} |
Oops, something went wrong.