Skip to content

Commit

Permalink
refactor rest mirror user
Browse files Browse the repository at this point in the history
  • Loading branch information
azhe403 committed Feb 11, 2024
1 parent 743ea1a commit d1d0297
Show file tree
Hide file tree
Showing 8 changed files with 55 additions and 85 deletions.
9 changes: 9 additions & 0 deletions backend/ZiziBot.Application/Core/ApiResponseBase.cs
Original file line number Diff line number Diff line change
Expand Up @@ -41,4 +41,13 @@ public ApiResponseBase<TResult> BadRequest(string message, TResult? result = def

return this;
}

public ApiResponseBase<TResult> NotFound(string message, TResult? result = default)
{
StatusCode = HttpStatusCode.NotFound;
Message = message;
Result = result;

return this;
}
}
2 changes: 1 addition & 1 deletion backend/ZiziBot.Application/Core/BotRequestBase.cs
Original file line number Diff line number Diff line change
Expand Up @@ -73,5 +73,5 @@ public class BotRequestBase : IRequest<BotResponseBase>
};

public TimeSpan DeleteAfter { get; set; } = TimeSpan.FromMinutes(1);
public string SessionId { get; set; } = Guid.NewGuid().ToString();
public string TransactionId { get; set; } = Guid.NewGuid().ToString();
}
Original file line number Diff line number Diff line change
@@ -1,5 +1,3 @@
using System.Net;

namespace ZiziBot.Application.Handlers.RestApis.MirrorUser;

public class CheckPaymentOrderIdRequest : ApiRequestBase<TrakteerParsedDto>
Expand All @@ -9,35 +7,21 @@ public class CheckPaymentOrderIdRequest : ApiRequestBase<TrakteerParsedDto>

public class CheckPaymentOrderIdHandler : IApiRequestHandler<CheckPaymentOrderIdRequest, TrakteerParsedDto>
{
private readonly ApiResponseBase<TrakteerParsedDto> _response = new();

public async Task<ApiResponseBase<TrakteerParsedDto>> Handle(CheckPaymentOrderIdRequest request, CancellationToken cancellationToken)
{
var parsedTrakteer = await request.OrderId.ParseTrakteerWeb();

if (parsedTrakteer.IsValid)
{
return new ApiResponseBase<TrakteerParsedDto>()
{
StatusCode = HttpStatusCode.OK,
Message = "Get OrderId succeed",
Result = parsedTrakteer
};
return _response.Success("Get OrderId succeed", parsedTrakteer);
}

var parsedSaweria = await request.OrderId.ParseSaweriaWeb();
if (parsedSaweria.IsValid)
{
return new ApiResponseBase<TrakteerParsedDto>()
{
StatusCode = HttpStatusCode.OK,
Message = "Get OrderId succeed",
Result = parsedSaweria
};
}

return new ApiResponseBase<TrakteerParsedDto>()
{
StatusCode = HttpStatusCode.OK,
Message = "OrderId not found"
};
return parsedSaweria.IsValid
? _response.Success("Get OrderId succeed", parsedSaweria)
: _response.BadRequest("OrderId not found");
}
}
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
using System.Net;
using MongoFramework.Linq;

namespace ZiziBot.Application.Handlers.RestApis.MirrorUser;
Expand All @@ -8,9 +7,10 @@ public class DeleteMirrorUserRequestDto : ApiRequestBase<bool>
public long UserId { get; set; }
}

public class DeleteMirrorUserRequestHandler : IRequestHandler<DeleteMirrorUserRequestDto, ApiResponseBase<bool>>
public class DeleteMirrorUserRequestHandler : IApiRequestHandler<DeleteMirrorUserRequestDto, bool>
{
private readonly MongoDbContextBase _mongoDbContext;
private readonly ApiResponseBase<bool> _response = new();

public DeleteMirrorUserRequestHandler(MongoDbContextBase mongoDbContext)
{
Expand All @@ -20,17 +20,19 @@ public DeleteMirrorUserRequestHandler(MongoDbContextBase mongoDbContext)
public async Task<ApiResponseBase<bool>> Handle(DeleteMirrorUserRequestDto request, CancellationToken cancellationToken)
{
var mirrorUser = await _mongoDbContext.MirrorUsers
.FirstOrDefaultAsync(user => user.UserId == request.UserId, cancellationToken: cancellationToken);
.Where(x => x.Status == (int)EventStatus.Complete)
.Where(x => x.UserId == request.UserId)
.FirstOrDefaultAsync(cancellationToken: cancellationToken);

if (mirrorUser == null)
{
return _response.BadRequest("Mirror User not found");
}

mirrorUser.Status = (int)EventStatus.Deleted;

await _mongoDbContext.SaveChangesAsync(cancellationToken);

return new ApiResponseBase<bool>
{
StatusCode = HttpStatusCode.OK,
Message = "User saved",
Result = true
};
return _response.Success("Mirror User deleted", true);
}
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,3 @@
using System.Net;
using MongoFramework.Linq;

namespace ZiziBot.Application.Handlers.RestApis.MirrorUser;

public class GetMirrorUserByUserIdRequestDto : ApiRequestBase<GetMirrorUserDto>
Expand All @@ -16,46 +13,33 @@ public class GetMirrorUserDto
public DateTime? MemberSince { get; set; }
}

public class GetMirrorUserByUserIdRequestHandler : IRequestHandler<GetMirrorUserByUserIdRequestDto, ApiResponseBase<GetMirrorUserDto>>
public class GetMirrorUserByUserIdRequestHandler : IApiRequestHandler<GetMirrorUserByUserIdRequestDto, GetMirrorUserDto>
{
private readonly MongoDbContextBase _mongoDbContext;
private readonly MirrorUserRepository _mirrorUserRepository;
private readonly ApiResponseBase<GetMirrorUserDto> _response = new();

public GetMirrorUserByUserIdRequestHandler(MongoDbContextBase mongoDbContext)
public GetMirrorUserByUserIdRequestHandler(MongoDbContextBase mongoDbContext, MirrorUserRepository mirrorUserRepository)
{
_mongoDbContext = mongoDbContext;
_mirrorUserRepository = mirrorUserRepository;
}

public async Task<ApiResponseBase<GetMirrorUserDto>> Handle(GetMirrorUserByUserIdRequestDto request, CancellationToken cancellationToken)
{
ApiResponseBase<GetMirrorUserDto> response = new();

var user = await _mongoDbContext.MirrorUsers
.Where(x =>
x.UserId == request.UserId &&
x.Status == (int)EventStatus.Complete
)
.FirstOrDefaultAsync(cancellationToken: cancellationToken);
var user = await _mirrorUserRepository.GetByUserId(request.UserId);

if (user == null)
{
response.StatusCode = HttpStatusCode.NotFound;
response.Message = "Mirror User not found";

return response;
return _response.NotFound("Mirror User not found");
}
else
{
response.StatusCode = HttpStatusCode.OK;
response.Message = "Mirror User found";
response.Result = new GetMirrorUserDto
{
UserId = request.UserId,
HasSubscription = user.ExpireDate > DateTime.UtcNow.AddHours(Env.DEFAULT_TIMEZONE),
SubscriptionUntil = user.ExpireDate.AddHours(Env.DEFAULT_TIMEZONE),
MemberSince = user.CreatedDate.AddHours(Env.DEFAULT_TIMEZONE)
};

return response;
}
return _response.Success("Mirror User found", new GetMirrorUserDto
{
UserId = request.UserId,
HasSubscription = user.ExpireDate > DateTime.UtcNow.AddHours(Env.DEFAULT_TIMEZONE),
SubscriptionUntil = user.ExpireDate.AddHours(Env.DEFAULT_TIMEZONE),
MemberSince = user.CreatedDate.AddHours(Env.DEFAULT_TIMEZONE)
});
}
}
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
using System.Net;
using MongoDB.Bson;
using MongoFramework.Linq;

Expand All @@ -19,9 +18,10 @@ public class GetMirrorUserResponseDto
public DateTime LastUpdate { get; set; }
}

public class GetMirrorUsersRequestHandler : IRequestHandler<GetMirrorUsersRequestDto, ApiResponseBase<IEnumerable<GetMirrorUserResponseDto>>>
public class GetMirrorUsersRequestHandler : IApiRequestHandler<GetMirrorUsersRequestDto, IEnumerable<GetMirrorUserResponseDto>>
{
private readonly MongoDbContextBase _mongoDbContext;
private readonly ApiResponseBase<IEnumerable<GetMirrorUserResponseDto>> _response = new();

public GetMirrorUsersRequestHandler(MongoDbContextBase mongoDbContext)
{
Expand All @@ -45,11 +45,6 @@ public async Task<ApiResponseBase<IEnumerable<GetMirrorUserResponseDto>>> Handle
LastUpdate = mirrorUser.UpdatedDate
});

return new ApiResponseBase<IEnumerable<GetMirrorUserResponseDto>>
{
StatusCode = HttpStatusCode.OK,
Message = "Users found",
Result = mirrorUsers
};
return _response.Success("Users found", mirrorUsers);
}
}
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
using System.Net;
using MongoFramework.Linq;

namespace ZiziBot.Application.Handlers.RestApis.MirrorUser;
Expand All @@ -11,9 +10,10 @@ public class PostMirrorUserRequestDto : ApiRequestBase<bool>
public string? AdditionalNote { get; set; }
}

public class PostMirrorUserRequestHandler : IRequestHandler<PostMirrorUserRequestDto, ApiResponseBase<bool>>
public class PostMirrorUserRequestHandler : IApiRequestHandler<PostMirrorUserRequestDto, bool>
{
private readonly MongoDbContextBase _mongoDbContext;
private readonly ApiResponseBase<bool> _response = new();

public PostMirrorUserRequestHandler(MongoDbContextBase mongoDbContext)
{
Expand Down Expand Up @@ -44,11 +44,6 @@ public async Task<ApiResponseBase<bool>> Handle(PostMirrorUserRequestDto request

await _mongoDbContext.SaveChangesAsync(cancellationToken);

return new ApiResponseBase<bool>
{
StatusCode = HttpStatusCode.OK,
Message = "User saved",
Result = true
};
return _response.Success("Mirror User saved", true);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -23,19 +23,20 @@ public SubmitPaymentUrlValidation()
}
}

public class SubmitPaymentUrlRequestHandler : IRequestHandler<SubmitPaymentUrlRequest, ApiResponseBase<bool>>
public class SubmitPaymentUrlRequestHandler : IApiRequestHandler<SubmitPaymentUrlRequest, bool>
{
private readonly MongoDbContextBase _mongoDbContext;
private readonly MirrorPaymentService _mirrorPaymentService;
private readonly ApiResponseBase<bool> _response = new();

public SubmitPaymentUrlRequestHandler(MongoDbContextBase mongoDbContext)
public SubmitPaymentUrlRequestHandler(MongoDbContextBase mongoDbContext, MirrorPaymentService mirrorPaymentService)
{
_mongoDbContext = mongoDbContext;
_mirrorPaymentService = mirrorPaymentService;
}

public async Task<ApiResponseBase<bool>> Handle(SubmitPaymentUrlRequest request, CancellationToken cancellationToken)
{
var response = new ApiResponseBase<bool>();

var mirrorApproval = await _mongoDbContext.MirrorApproval
.FirstOrDefaultAsync(x =>
x.PaymentUrl == request.Body.Payload &&
Expand All @@ -44,14 +45,14 @@ public async Task<ApiResponseBase<bool>> Handle(SubmitPaymentUrlRequest request,

if (mirrorApproval != null)
{
return response.BadRequest("Pembayaran sudah terverifikasi sebelumnya.");
return _response.BadRequest("Pembayaran sudah terverifikasi sebelumnya.");
}

var trakteerParsedDto = await request.Body.Payload.ParseTrakteerWeb();

if (!trakteerParsedDto.IsValid)
{
return response.BadRequest("Tautan Pembayaran tidak valid. Contoh: https://trakteer.id/payment-status/123456");
return _response.BadRequest("Tautan Pembayaran tidak valid. Contoh: https://trakteer.id/payment-status/123456");
}

_mongoDbContext.MirrorApproval.Add(new MirrorApprovalEntity()
Expand Down Expand Up @@ -106,7 +107,7 @@ public async Task<ApiResponseBase<bool>> Handle(SubmitPaymentUrlRequest request,

await _mongoDbContext.SaveChangesAsync(cancellationToken);

return response.Success("Pembayaran berhasil diverifikasi.", true);
return _response.Success("Pembayaran berhasil diverifikasi.", true);
}

}

0 comments on commit d1d0297

Please sign in to comment.