Skip to content

Commit

Permalink
revision 4.2
Browse files Browse the repository at this point in the history
  • Loading branch information
Dhiogo Acioli committed Sep 18, 2022
1 parent 7b10606 commit 689c2a7
Show file tree
Hide file tree
Showing 15 changed files with 326 additions and 17 deletions.
93 changes: 93 additions & 0 deletions src/VerusDate.Api/Function/InviteFunction.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,93 @@
using MediatR;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Extensions.Http;
using Microsoft.Extensions.Logging;
using System;
using System.Linq;
using System.Threading;
using System.Threading.Tasks;
using VerusDate.Api.Core;
using VerusDate.Api.Mediator.Command.Profile;
using VerusDate.Api.Mediator.Queries.Profile;
using VerusDate.Shared.Model.Profile;

namespace VerusDate.Api.Function
{
public class InviteFunction
{
private readonly IMediator _mediator;

public InviteFunction(IMediator mediator)
{
_mediator = mediator;
}

[FunctionName("InviteGet")]
public async Task<IActionResult> Get(
[HttpTrigger(AuthorizationLevel.Function, FunctionMethod.GET, Route = "Invite/Get")] HttpRequest req,
ILogger log, CancellationToken cancellationToken)
{
using var source = CancellationTokenSource.CreateLinkedTokenSource(cancellationToken, req.HttpContext.RequestAborted);

try
{
var request = req.BuildRequestQuery<InviteGetCommand, InviteModel>(req.Query["email"]);

var result = await _mediator.Send(request, source.Token);

return new OkObjectResult(result);
}
catch (Exception ex)
{
log.LogError(ex, req.Query.BuildMessage(), req.Query.ToList());
return new BadRequestObjectResult(ex.ProcessException());
}
}

[FunctionName("InviteAdd")]
public async Task<IActionResult> Add(
[HttpTrigger(AuthorizationLevel.Function, FunctionMethod.POST, Route = "Invite/Add")] HttpRequest req,
ILogger log, CancellationToken cancellationToken)
{
using var source = CancellationTokenSource.CreateLinkedTokenSource(cancellationToken, req.HttpContext.RequestAborted);

try
{
var request = await req.BuildRequestCommand<InviteAddCommand>(source.Token, false);

var result = await _mediator.Send(request, source.Token);

return new OkObjectResult(result);
}
catch (Exception ex)
{
log.LogError(ex, req.Query.BuildMessage(), req.Query.ToList());
return new BadRequestObjectResult(ex.ProcessException());
}
}

[FunctionName("InviteUpdate")]
public async Task<IActionResult> Update(
[HttpTrigger(AuthorizationLevel.Function, FunctionMethod.PUT, Route = "Invite/Update")] HttpRequest req,
ILogger log, CancellationToken cancellationToken)
{
using var source = CancellationTokenSource.CreateLinkedTokenSource(cancellationToken, req.HttpContext.RequestAborted);

try
{
var request = await req.BuildRequestCommand<InviteUpdateCommand>(source.Token, false);

var result = await _mediator.Send(request, source.Token);

return new OkObjectResult(result);
}
catch (Exception ex)
{
log.LogError(ex, req.Query.BuildMessage(), req.Query.ToList());
return new BadRequestObjectResult(ex.ProcessException());
}
}
}
}
27 changes: 27 additions & 0 deletions src/VerusDate.Api/Mediator/Command/Profile/InviteAddCommand.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
using MediatR;
using System.Threading;
using System.Threading.Tasks;
using VerusDate.Api.Core.Interfaces;
using VerusDate.Shared.Model.Profile;

namespace VerusDate.Api.Mediator.Command.Profile
{
public class InviteAddCommand : InviteModel, IRequest<InviteModel>
{
}

public class InviteAddHandler : IRequestHandler<InviteAddCommand, InviteModel>
{
private readonly IRepository _repo;

public InviteAddHandler(IRepository repo)
{
_repo = repo;
}

public async Task<InviteModel> Handle(InviteAddCommand request, CancellationToken cancellationToken)
{
return await _repo.Add(request, cancellationToken);
}
}
}
27 changes: 27 additions & 0 deletions src/VerusDate.Api/Mediator/Command/Profile/InviteUpdateCommand.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
using MediatR;
using System.Threading;
using System.Threading.Tasks;
using VerusDate.Api.Core.Interfaces;
using VerusDate.Shared.Model.Profile;

namespace VerusDate.Api.Mediator.Command.Profile
{
public class InviteUpdateCommand : InviteModel, IRequest<bool>
{
}

public class InviteUpdateHandler : IRequestHandler<InviteUpdateCommand, bool>
{
private readonly IRepository _repo;

public InviteUpdateHandler(IRepository repo)
{
_repo = repo;
}

public async Task<bool> Handle(InviteUpdateCommand request, CancellationToken cancellationToken)
{
return await _repo.Update(request, cancellationToken);
}
}
}
39 changes: 39 additions & 0 deletions src/VerusDate.Api/Mediator/Queries/Profile/InviteGetCommand.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
using MediatR;
using Microsoft.AspNetCore.Http;
using System.Threading;
using System.Threading.Tasks;
using VerusDate.Api.Core.Interfaces;
using VerusDate.Shared.Core;
using VerusDate.Shared.Model.Profile;

namespace VerusDate.Api.Mediator.Queries.Profile
{
public class InviteGetCommand : MediatorQuery<InviteModel>
{
public InviteGetCommand() : base(CosmosType.Invite)
{
}

public string Email { get; set; }

public override void SetParameters(IQueryCollection query)
{
Email = query["Email"];
}
}

public class InviteGetHandler : IRequestHandler<InviteGetCommand, InviteModel>
{
private readonly IRepository _repo;

public InviteGetHandler(IRepository repo)
{
_repo = repo;
}

public async Task<InviteModel> Handle(InviteGetCommand request, CancellationToken cancellationToken)
{
return await _repo.Get<InviteModel>(request.GetId(request.Email), request.Email, cancellationToken);
}
}
}
5 changes: 3 additions & 2 deletions src/VerusDate.Shared/Core/ComosBase.cs
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,8 @@ public enum CosmosType
Chat = 4,
Ticket = 5,
TicketVote = 6,
Event = 7
Event = 7,
Invite = 8
}

public abstract class CosmosBase
Expand Down Expand Up @@ -49,7 +50,7 @@ protected CosmosBase(CosmosType Type)
public DateTime? DtUpdate { get; set; }

/// <summary>
/// Recupera o status dos dados atuais
/// Recupera o status dos dados atuais (não usar quando o id for dinâmico)
/// </summary>
/// <returns></returns>
public DataStatus GetDataStatus()
Expand Down
45 changes: 45 additions & 0 deletions src/VerusDate.Shared/Model/Profile/InviteModel.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
using System;
using System.Collections.Generic;
using VerusDate.Shared.Core;

namespace VerusDate.Shared.Model.Profile
{
public class InviteModel : CosmosBase
{
public InviteModel() : base(CosmosType.Invite)
{
}

public List<Invite> Invites { get; set; } = new();

public void UpdateData()
{
DtUpdate = DateTime.UtcNow;
}

public override void SetIds(string email)
{
this.SetId(email);
this.SetPartitionKey(email);
}
}

public class Invite
{
public Invite(string UserId, InviteType Type)
{
this.UserId = UserId;
this.Type = Type;
}

public string UserId { get; set; }
public DateTime DtInvite { get; set; } = DateTime.UtcNow;
public InviteType Type { get; set; }
public bool Accepted { get; set; }
}

public enum InviteType
{
Partner = 1
}
}

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Original file line number Diff line number Diff line change
Expand Up @@ -142,7 +142,7 @@
<value>Intenções</value>
</data>
<data name="Languages_Description" xml:space="preserve">
<value>Escolhido automaticamente de acordo com os idiomas oficiais do pais (caso disponível)</value>
<value>Escolhido automaticamente de acordo com os idiomas vigentes no pais (caso disponível)</value>
</data>
<data name="Languages_Name" xml:space="preserve">
<value>Idiomas</value>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -142,7 +142,7 @@
<value>Intentions</value>
</data>
<data name="Languages_Description" xml:space="preserve">
<value>Automatically chosen according to the official languages of the country (if available)</value>
<value>Automatically chosen according to the languages in force in the country (if available)</value>
</data>
<data name="Languages_Name" xml:space="preserve">
<value>Languages</value>
Expand Down
37 changes: 37 additions & 0 deletions src/VerusDate.Web/Api/InviteApi.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
using Blazored.SessionStorage;
using Blazored.Toast.Services;
using VerusDate.Shared.Model.Profile;
using VerusDate.Web.Core;

namespace VerusDate.Web.Api
{
public struct InviteEndpoint
{
public static string Get(string email) => $"Invite/Get?email={email}";

public const string Add = "Invite/Add";
public const string Update = "Invite/Update";
}

public static class InviteApi
{
public static async Task<InviteModel> Invite_Get(this HttpClient http, ISyncSessionStorageService storage, string email)
{
return await http.Get<InviteModel>(InviteEndpoint.Get(email), storage);
}

public static async Task Invite_Add(this HttpClient http, InviteModel obj, IToastService toast)
{
var response = await http.Post(InviteEndpoint.Add, obj);

await response.ProcessResponse(toast, "Convite criado com sucesso");
}

public static async Task Invite_Update(this HttpClient http, InviteModel obj, IToastService toast)
{
var response = await http.Put(InviteEndpoint.Update, obj);

await response.ProcessResponse(toast, "Convite criado com sucesso"); //para o usuário, esse é o primeiro convite, então é 'criado' mesmo
}
}
}
4 changes: 2 additions & 2 deletions src/VerusDate.Web/Api/ProfileApi.cs
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,7 @@ public static async Task Profile_Update(this HttpClient http, ProfileModel obj,

public static async Task Profile_UpdateLooking(this HttpClient http, ProfileModel obj, ProfilePreferenceModel preference, ISyncSessionStorageService storage, IToastService toast)
{
var fistUpdate = obj.Preference == null;
//var fistUpdate = obj.Preference == null;

obj.Preference = preference;

Expand All @@ -94,7 +94,7 @@ public static async Task Profile_UpdateLooking(this HttpClient http, ProfileMode
storage.Session_Update_Profile(obj);
}

await response.ProcessResponse(toast, "Definição de busca atualizada com sucesso");
await response.ProcessResponse(toast, "Preferências atualizadas com sucesso");
}
}
}
2 changes: 1 addition & 1 deletion src/VerusDate.Web/Core/ApiCore.cs
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,7 @@ public static async Task<List<T>> GetList<T>(this HttpClient http, string reques
return storage.GetItem<List<T>>(requestUri);
}

public static async Task<HttpResponseMessage> Post<T>(this HttpClient http, string requestUri, T obj, ISyncSessionStorageService storage, string urlGet) where T : class
public static async Task<HttpResponseMessage> Post<T>(this HttpClient http, string requestUri, T obj, ISyncSessionStorageService? storage = null, string? urlGet = null) where T : class
{
var response = await http.PostAsJsonAsync(http.BaseApi() + requestUri, obj, GetOptions());

Expand Down
6 changes: 3 additions & 3 deletions src/VerusDate.Web/Pages/Index.razor
Original file line number Diff line number Diff line change
Expand Up @@ -34,12 +34,12 @@
</Button>
</Column>
<Column ColumnSize="ColumnSize.Is6" Margin="Margin.Is2.FromBottom">
<Button Color="Color.Primary" Outline="true" Block="true" Type="ButtonType.Link" To="/Profile/Gallery">
<Button Color="Color.Primary" Outline="true" Block="true" Type="ButtonType.Link" To="/Profile/Gallery" Disabled="true">
<Blazorise.Icon Name="FontAwesomeIcons.Portrait"></Blazorise.Icon> Fotos
@if (profile?.Photo == null)
@*@if (profile?.Photo == null)
{
<Blazorise.Icon Name="FontAwesomeIcons.ExclamationCircle" Style="color: #dc3545;"></Blazorise.Icon>
}
}*@
</Button>
</Column>
<Column ColumnSize="ColumnSize.Is6" Margin="Margin.Is2.FromBottom">
Expand Down
1 change: 1 addition & 0 deletions src/VerusDate.Web/Pages/Profile/ProfileData.razor
Original file line number Diff line number Diff line change
Expand Up @@ -206,6 +206,7 @@
</Alert>
<FieldText For="@(() => partner.Email)" @bind-Value="@partner.Email" LabelSize="LabelSize.Normal" ButtomCssIcon="FontAwesomeIcons.PaperPlane"
ButtomClicked="@AddNewPartner"></FieldText>
<Divider DividerType="DividerType.TextContent" Text="ou" />
<Field Horizontal="true">
<FieldLabel ColumnSize="ColumnSize.IsFull.OnWidescreen.Is4.OnFullHD">
Parceiro já cadastrado?
Expand Down
Loading

0 comments on commit 689c2a7

Please sign in to comment.