Skip to content

Commit

Permalink
Merge pull request #15 from IliyanIlievPH/12
Browse files Browse the repository at this point in the history
Closes #12
  • Loading branch information
starkmsu committed Apr 28, 2020
2 parents 0012d83 + f7c9032 commit c15b5ec
Show file tree
Hide file tree
Showing 26 changed files with 1,707 additions and 3 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
using System;
using System.Collections.Generic;
using System.Net;
using System.Threading.Tasks;
using MAVN.Service.CustomerProfile.Client.Models.Enums;
using MAVN.Service.CustomerProfile.Client.Models.Requests;
using MAVN.Service.CustomerProfile.Client.Models.Responses;
using Microsoft.AspNetCore.Mvc;
using Refit;

namespace MAVN.Service.CustomerProfile.Client.Api
{
/// <summary>
/// PaymentProviderDetails API
/// </summary>
public interface IPaymentProviderDetailsApi
{
/// <summary>
/// Creates payment provider details
/// </summary>
/// <returns><see cref="PaymentProviderDetailsErrorCodes"/></returns>
[Post("/api/paymentProviderDetails")]
Task<PaymentProviderDetailsErrorCodes> CreateAsync([Body] CreatePaymentProviderDetailsRequest request);

/// <summary>
/// Updates payment provider details
/// </summary>
/// <returns><see cref="PaymentProviderDetailsErrorCodes"/></returns>
[Put("/api/paymentProviderDetails")]
[ProducesResponseType(typeof(PaymentProviderDetailsErrorCodes), (int) HttpStatusCode.OK)]
Task<PaymentProviderDetailsErrorCodes> UpdateAsync([Body] EditPaymentProviderDetailsRequest request);

/// <summary>
/// Deletes payment provider details
/// </summary>
/// <returns><see cref="PaymentProviderDetailsErrorCodes"/></returns>
[Delete("/api/paymentProviderDetails/{id}")]
Task<PaymentProviderDetailsErrorCodes> DeleteAsync(Guid id);

/// <summary>
/// Returns all payment provider details for specific partner
/// </summary>
/// <returns><see cref="IReadOnlyList{T}<PaymentProviderDetails>"/></returns>
[Get("/api/paymentProviderDetails/{partnerId}")]
Task<IReadOnlyList<PaymentProviderDetails>> GetListByPartnerIdAsync([FromRoute] Guid partnerId);

/// <summary>
/// Returns all payment provider details for specific partner
/// </summary>
/// <returns><see cref="GetByPartnerIdAndPaymentProviderResponse"/></returns>
[Get("/api/paymentProviderDetails")]
Task<GetByPartnerIdAndPaymentProviderResponse> GetByPartnerIdAndPaymentProviderAsync([Query]Guid partnerId,
[Query]string paymentProvider);
}
}
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
using Lykke.HttpClientGenerator;
using Lykke.HttpClientGenerator;
using MAVN.Service.CustomerProfile.Client.Api;

namespace MAVN.Service.CustomerProfile.Client
Expand All @@ -19,6 +19,7 @@ public CustomerProfileClient(IHttpClientGenerator httpClientGenerator)
ReferralFriendProfiles = httpClientGenerator.Generate<IReferralFriendProfilesApi>();
Statistics = httpClientGenerator.Generate<IStatisticsApi>();
CustomerPhones = httpClientGenerator.Generate<ICustomerPhonesApi>();
PaymentProviderDetails = httpClientGenerator.Generate<IPaymentProviderDetailsApi>();
}

/// <inheritdoc/>
Expand All @@ -44,5 +45,8 @@ public CustomerProfileClient(IHttpClientGenerator httpClientGenerator)

/// <inheritdoc/>
public ICustomerPhonesApi CustomerPhones { get; }

/// <inheritdoc/>
public IPaymentProviderDetailsApi PaymentProviderDetails { get; }
}
}
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
using JetBrains.Annotations;
using JetBrains.Annotations;
using MAVN.Service.CustomerProfile.Client.Api;

namespace MAVN.Service.CustomerProfile.Client
Expand Down Expand Up @@ -48,5 +48,10 @@ public interface ICustomerProfileClient
/// CustomerPhones API.
/// </summary>
ICustomerPhonesApi CustomerPhones { get; }

/// <summary>
/// PaymentProviderDetails API.
/// </summary>
IPaymentProviderDetailsApi PaymentProviderDetails { get; }
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
using JetBrains.Annotations;

namespace MAVN.Service.CustomerProfile.Client.Models.Enums
{
/// <summary>
/// Enumeration that holds error codes for payment provider details operations
/// </summary>
[PublicAPI]
public enum PaymentProviderDetailsErrorCodes
{
/// <summary>
/// No errors
/// </summary>
None,
/// <summary>
/// Payment provider details does not exist
/// </summary>
PaymentProviderDetailsDoesNotExist,
/// <summary>
/// There is already existing unique pair for this partner and provider
/// </summary>
PaymentProviderDetailsAlreadyExists
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
using System;
using System.ComponentModel.DataAnnotations;
using JetBrains.Annotations;

namespace MAVN.Service.CustomerProfile.Client.Models.Requests
{
/// <summary>
/// Request model to create payment provider details
/// </summary>
[PublicAPI]
public class CreatePaymentProviderDetailsRequest
{
/// <summary>
/// The id of the partner
/// </summary>
[Required]
public Guid PartnerId { get; set; }

/// <summary>
/// the payment provider used
/// </summary>
[Required]
public string PaymentIntegrationProvider { get; set; }

/// <summary>
/// Configuration properties for the payment provider (json)
/// </summary>
[Required]
public string PaymentIntegrationProperties { get; set; }
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
using System;
using System.ComponentModel.DataAnnotations;
using JetBrains.Annotations;

namespace MAVN.Service.CustomerProfile.Client.Models.Requests
{
/// <summary>
/// Edit request model
/// </summary>
[PublicAPI]
public class EditPaymentProviderDetailsRequest : CreatePaymentProviderDetailsRequest
{
/// <summary>
/// Id of the details model
/// </summary>
[Required]
public Guid Id { get; set; }
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
using JetBrains.Annotations;
using MAVN.Service.CustomerProfile.Client.Models.Enums;

namespace MAVN.Service.CustomerProfile.Client.Models.Responses
{
/// <summary>
/// Response model
/// </summary>
[PublicAPI]
public class GetByPartnerIdAndPaymentProviderResponse
{
/// <summary>
/// Payment provider information
/// </summary>
public PaymentProviderDetails PaymentProviderDetails { get; set; }

/// <summary>
/// Error
/// </summary>
public PaymentProviderDetailsErrorCodes ErrorCode { get; set; }
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
using System;
using JetBrains.Annotations;

namespace MAVN.Service.CustomerProfile.Client.Models.Responses
{
/// <summary>
/// Holds payment provider details
/// </summary>
[PublicAPI]
public class PaymentProviderDetails
{
/// <summary>
/// Id of the details
/// </summary>
public Guid Id { get; set; }

/// <summary>
/// Id of the partner
/// </summary>
public Guid PartnerId { get; set; }

/// <summary>
/// Name of the payment provider
/// </summary>
public string PaymentIntegrationProvider { get; set; }

/// <summary>
/// Payment integration properties for the provider
/// </summary>
public string PaymentIntegrationProperties { get; set; }
}
}
Binary file modified readme-images/customer-profile-kubernetes.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
namespace MAVN.Service.CustomerProfile.Domain.Enums
{
public enum PaymentProviderDetailsErrorCodes
{
None,
PaymentProviderDetailsDoesNotExist,
PaymentProviderDetailsAlreadyExists
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
using System;

namespace MAVN.Service.CustomerProfile.Domain.Models
{
public interface IPaymentProviderDetails
{
Guid Id { get; set; }

Guid PartnerId { get; set; }

string PaymentIntegrationProvider { get; set; }

string PaymentIntegrationProperties { get; set; }
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using MAVN.Service.CustomerProfile.Domain.Models;

namespace MAVN.Service.CustomerProfile.Domain.Repositories
{
public interface IPaymentProviderDetailsRepository
{
Task CreateAsync(IPaymentProviderDetails model);
Task<bool> UpdateAsync(IPaymentProviderDetails model);
Task<bool> DeleteAsync(Guid id);
Task<IReadOnlyList<IPaymentProviderDetails>> GetListByPartnerIdAsync(Guid partnerId);
Task<IPaymentProviderDetails> GetByPartnerIdAndProviderAsync(Guid partnerId, string paymentProvider);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using MAVN.Service.CustomerProfile.Domain.Enums;
using MAVN.Service.CustomerProfile.Domain.Models;

namespace MAVN.Service.CustomerProfile.Domain.Services
{
public interface IPaymentProviderDetailsService
{
Task<PaymentProviderDetailsErrorCodes> CreateAsync(IPaymentProviderDetails model);
Task<PaymentProviderDetailsErrorCodes> UpdateAsync(IPaymentProviderDetails model);
Task<PaymentProviderDetailsErrorCodes> DeleteAsync(Guid id);
Task<IReadOnlyList<IPaymentProviderDetails>> GetListByPartnerIdAsync(Guid partnerId);
Task<IPaymentProviderDetails> GetByPartnerIdAndPaymentProviderAsync(Guid partnerId, string paymentProvider);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using MAVN.Service.CustomerProfile.Domain.Enums;
using MAVN.Service.CustomerProfile.Domain.Models;
using MAVN.Service.CustomerProfile.Domain.Repositories;
using MAVN.Service.CustomerProfile.Domain.Services;

namespace MAVN.Service.CustomerProfile.DomainServices
{
public class PaymentProviderDetailsService : IPaymentProviderDetailsService
{
private readonly IPaymentProviderDetailsRepository _paymentProviderDetailsRepository;

public PaymentProviderDetailsService(IPaymentProviderDetailsRepository paymentProviderDetailsRepository)
{
_paymentProviderDetailsRepository = paymentProviderDetailsRepository;
}

public async Task<PaymentProviderDetailsErrorCodes> CreateAsync(IPaymentProviderDetails model)
{
var existingPaymentProviderDetails =
await _paymentProviderDetailsRepository.GetByPartnerIdAndProviderAsync(model.PartnerId,
model.PaymentIntegrationProvider);

if (existingPaymentProviderDetails != null)
return PaymentProviderDetailsErrorCodes.PaymentProviderDetailsAlreadyExists;

await _paymentProviderDetailsRepository.CreateAsync(model);

return PaymentProviderDetailsErrorCodes.None;
}

public async Task<PaymentProviderDetailsErrorCodes> UpdateAsync(IPaymentProviderDetails model)
{
var existingPaymentProviderDetails =
await _paymentProviderDetailsRepository.GetByPartnerIdAndProviderAsync(model.PartnerId,
model.PaymentIntegrationProvider);

if ( existingPaymentProviderDetails != null && existingPaymentProviderDetails.Id != model.Id)
return PaymentProviderDetailsErrorCodes.PaymentProviderDetailsAlreadyExists;

var isUpdated = await _paymentProviderDetailsRepository.UpdateAsync(model);

return isUpdated
? PaymentProviderDetailsErrorCodes.None
: PaymentProviderDetailsErrorCodes.PaymentProviderDetailsDoesNotExist;
}

public async Task<PaymentProviderDetailsErrorCodes> DeleteAsync(Guid id)
{
var isDeleted = await _paymentProviderDetailsRepository.DeleteAsync(id);

return isDeleted
? PaymentProviderDetailsErrorCodes.None
: PaymentProviderDetailsErrorCodes.PaymentProviderDetailsDoesNotExist;
}

public Task<IReadOnlyList<IPaymentProviderDetails>> GetListByPartnerIdAsync(Guid partnerId)
{
var result = _paymentProviderDetailsRepository.GetListByPartnerIdAsync(partnerId);
return result;
}

public Task<IPaymentProviderDetails> GetByPartnerIdAndPaymentProviderAsync(Guid partnerId,
string paymentProvider)
{
var result = _paymentProviderDetailsRepository.GetByPartnerIdAndProviderAsync(partnerId, paymentProvider);
return result;
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,8 @@ public class CustomerProfileContext : MsSqlContext

internal DbSet<ReferralFriendProfileEntity> ReferralFriendProfiles { get; set; }

internal DbSet<PaymentProviderDetailsEntity> PaymentProviderDetails { get; set; }

internal DbSet<ReferralFriendProfileArchiveEntity> ReferralFriendProfilesArchive { get; set; }

[UsedImplicitly]
Expand Down Expand Up @@ -114,6 +116,13 @@ protected override void OnLykkeModelCreating(ModelBuilder modelBuilder)

modelBuilder.Entity<ReferralLeadProfileEntity>()
.HasIndex(c => c.PhoneNumber);

// configuring payment_provider_details table
modelBuilder.Entity<PaymentProviderDetailsEntity>()
.HasIndex(c => c.PartnerId).IsUnique(false);

modelBuilder.Entity<PaymentProviderDetailsEntity>()
.HasIndex(c => new { c.PartnerId, c.PaymentIntegrationProvider }).IsUnique();
}
}
}
Loading

0 comments on commit c15b5ec

Please sign in to comment.