Skip to content

Commit

Permalink
feature/ui-payment-history and ui-purchase-credit (#119)
Browse files Browse the repository at this point in the history
* feature/ui-payment-history

* feature/ui purchase credit and ui payment history

---------

Co-authored-by: Thống <work@thongdanghoang.id.vn>
  • Loading branch information
huynhlephcvinh and thongdanghoang authored Feb 13, 2025
1 parent 7247c55 commit a63d02b
Show file tree
Hide file tree
Showing 33 changed files with 858 additions and 435 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
package sep490.common.api.enums;

public enum StatusPayment {
SUCCESS,
FAILED
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
package enterprise.dtos;

public record PaymentCriteriaDTO(String criteria) {
}
17 changes: 17 additions & 0 deletions sep490-enterprise/src/main/java/enterprise/dtos/PaymentDTO.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package enterprise.dtos;

import com.fasterxml.jackson.annotation.JsonFormat;
import jakarta.validation.constraints.NotNull;
import sep490.common.api.enums.StatusPayment;

import java.time.LocalDateTime;
import java.util.Date;
import java.util.UUID;

public record PaymentDTO(
UUID id,
@JsonFormat(pattern = "dd/MM/yyyy") LocalDateTime createdDate,
StatusPayment status,
@NotNull long amount
) {
}
Original file line number Diff line number Diff line change
@@ -1,7 +1,10 @@
package enterprise.entities;

import commons.springfw.impl.entities.AbstractAuditableEntity;
import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.EnumType;
import jakarta.persistence.Enumerated;
import jakarta.persistence.FetchType;
import jakarta.persistence.JoinColumn;
import jakarta.persistence.ManyToOne;
Expand All @@ -10,6 +13,7 @@
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import sep490.common.api.enums.StatusPayment;

@Entity
@Table(name = "payments")
Expand All @@ -28,4 +32,12 @@ public class PaymentEntity extends AbstractAuditableEntity {
@JoinColumn(name = "bundle_id", nullable = false)
private BundleEntity bundle;

@NotNull
@Enumerated(EnumType.STRING)
@Column(name = "status")
private StatusPayment status;

@Column(name = "amount")
private long amount;

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
package enterprise.mappers;

import enterprise.dtos.PaymentDTO;
import enterprise.entities.PaymentEntity;
import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
import org.mapstruct.MappingConstants;

@Mapper(componentModel = MappingConstants.ComponentModel.SPRING)
public interface PaymentMapper {

PaymentDTO paymentEntityToPaymentDTO(PaymentEntity paymentEntity);
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,18 @@

import commons.springfw.impl.repositories.AbstractBaseRepository;
import enterprise.entities.PaymentEntity;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.repository.Query;

import java.util.UUID;

public interface PaymentRepository extends AbstractBaseRepository<PaymentEntity> {

@Query("""
SELECT p
FROM PaymentEntity p
"""
)
Page<PaymentEntity> findByName(String name, Pageable pageable);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
package enterprise.rest;

import commons.springfw.impl.mappers.CommonMapper;
import enterprise.dtos.PaymentCriteriaDTO;
import enterprise.dtos.PaymentDTO;
import enterprise.mappers.PaymentMapper;
import enterprise.services.PaymentService;
import green_buildings.commons.api.dto.SearchCriteriaDTO;
import green_buildings.commons.api.dto.SearchResultDTO;
import lombok.RequiredArgsConstructor;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;


@RestController
@RequestMapping("/payment")
@RequiredArgsConstructor
public class PaymentController {

private final PaymentService paymentService;
private final PaymentMapper paymentMapper;

@PostMapping("/search")
public ResponseEntity<SearchResultDTO<PaymentDTO>> searchPayment(@RequestBody SearchCriteriaDTO<PaymentCriteriaDTO> searchCriteria) {
var pageable = CommonMapper.toPageable(searchCriteria.page(), searchCriteria.sort());
var searchResults = paymentService.search(searchCriteria, pageable);
return ResponseEntity.ok(
CommonMapper.toSearchResultDTO(
searchResults,
paymentMapper::paymentEntityToPaymentDTO));
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
package enterprise.rest;

import commons.springfw.impl.securities.UserContextData;
import enterprise.dtos.BuildingDTO;
import green_buildings.commons.api.exceptions.BusinessException;
import lombok.RequiredArgsConstructor;
import org.apache.commons.lang3.StringUtils;
import org.springframework.http.ResponseEntity;

import org.springframework.security.core.annotation.AuthenticationPrincipal;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.Collections;
import java.util.Objects;

@RestController
@RequestMapping("/wallet")
@RequiredArgsConstructor
public class WalletController {

@GetMapping("/balance")
public ResponseEntity<Void> getBalance(@AuthenticationPrincipal UserContextData userContextData) {
//TODO: Must Authentication => get Id Enterpirse => get Wallet => get Balence
if (Objects.nonNull(userContextData.getEnterpriseId())) {
throw new BusinessException(StringUtils.EMPTY, "error.user.already.belongs.to.enterprise", Collections.emptyList());
}
return ResponseEntity.ok().build();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
package enterprise.services;

import enterprise.dtos.PaymentCriteriaDTO;
import enterprise.entities.PaymentEntity;
import green_buildings.commons.api.dto.SearchCriteriaDTO;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;


public interface PaymentService {

Page<PaymentEntity> search(SearchCriteriaDTO<PaymentCriteriaDTO> searchCriteria, Pageable pageable);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package enterprise.services;

import enterprise.entities.WalletEntity;

public interface WalletService {
WalletEntity getBalance();
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
package enterprise.services.impl;

import commons.springfw.impl.utils.SecurityUtils;
import enterprise.dtos.PaymentCriteriaDTO;
import enterprise.entities.PaymentEntity;
import enterprise.repositories.PaymentRepository;
import enterprise.services.PaymentService;
import green_buildings.commons.api.dto.SearchCriteriaDTO;
import jakarta.transaction.Transactional;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Service;

import java.util.UUID;
import java.util.function.Function;
import java.util.stream.Collectors;

@Service
@Slf4j
@Transactional(rollbackOn = Throwable.class)
@RequiredArgsConstructor
public class PaymentServiceImpl implements PaymentService {
private final PaymentRepository payRepo;

@Override
public Page<PaymentEntity> search(SearchCriteriaDTO<PaymentCriteriaDTO> searchCriteria, Pageable pageable) {
// UUID enterpriseId = SecurityUtils.getCurrentUserEnterpriseId().orElseThrow();
return payRepo.findByName(
searchCriteria.criteria().criteria(),
// enterpriseId,
pageable);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
package enterprise.services.impl;

import commons.springfw.impl.utils.SecurityUtils;
import enterprise.entities.WalletEntity;
import enterprise.repositories.WalletRepository;
import enterprise.services.WalletService;
import jakarta.transaction.Transactional;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;

import java.util.UUID;

@Service
@Slf4j
@Transactional(rollbackOn = Throwable.class)
@RequiredArgsConstructor
public class WalletServiceImpl implements WalletService {
private final WalletRepository walRepo;
@Override
public WalletEntity getBalance(){
// UUID enterpriseId = SecurityUtils.getCurrentUserEnterpriseId().orElseThrow();
//TODO are here

return new WalletEntity();
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
ALTER TABLE payments ADD status VARCHAR(255) NOT NULL;
ALTER TABLE payments ADD amount BIGINT NOT NULL;
3 changes: 2 additions & 1 deletion sep490-frontend/src/app/app-routing.constant.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ import {environment} from '../environments/environment';

export class AppRoutingConstants {
public static readonly IDP_API_URL = environment.idpApiUrl;
public static readonly ENTERPRISE_API_URL = environment.enterpriseUrl;

// To be remove
public static readonly DEV_PATH = 'dev';
Expand All @@ -14,7 +15,7 @@ export class AppRoutingConstants {
public static readonly ENTERPRISE_PATH = 'enterprise';
public static readonly BUILDING_PATH = 'buildings';
public static readonly PLAN_PATH = 'plan';
public static readonly PAYMENT_PATH = 'payments';
public static readonly PAYMENT_PATH = 'payment';

// Emissions Module
public static readonly EMISSIONS_PATH = 'emissions';
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@ import {Observable} from 'rxjs';
import {UUID} from '../../../../types/uuid';
import {AppRoutingConstants} from '../../../app-routing.constant';
import {SearchCriteriaDto, SearchResultDto} from '../../shared/models/models';
import {UserCriteria} from '../components/users/users.component';
import {EnterpriseUser, EnterpriseUserDetails} from '../models/enterprise-user';
import {UserCriteria} from '../components/users/users.component';

@Injectable()
export class UserService {
Expand Down
Loading

0 comments on commit a63d02b

Please sign in to comment.