Skip to content

Commit

Permalink
feature: Fetch credit packages
Browse files Browse the repository at this point in the history
  • Loading branch information
Tran Gia Bao committed Feb 16, 2025
1 parent 73d383c commit b8f8e1b
Show file tree
Hide file tree
Showing 25 changed files with 207 additions and 67 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
package enterprise.dtos;

import java.util.UUID;

public record CreditPackageDTO(UUID id, int version, int numberOfCredits, long price) {
}

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
package enterprise.entities;

import commons.springfw.impl.entities.AbstractAuditableEntity;
import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.Table;
import jakarta.validation.constraints.Min;
import jakarta.validation.constraints.NotNull;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;

@Entity
@Table(name = "credit_packages")
@Getter
@Setter
@NoArgsConstructor
public class CreditPackageEntity extends AbstractAuditableEntity {

@Column(name = "number_of_credits", nullable = false)
@Min(0)
@NotNull
private int numberOfCredits = 0;

@Column(name = "price", nullable = false)
@Min(0)
@NotNull
private long price = 0;

}
Original file line number Diff line number Diff line change
Expand Up @@ -27,11 +27,6 @@ public class PaymentEntity extends AbstractAuditableEntity {
@JoinColumn(name = "enterprise_id", nullable = false)
private EnterpriseEntity enterprise;

@NotNull
@ManyToOne(fetch = FetchType.LAZY, optional = false)
@JoinColumn(name = "bundle_id", nullable = false)
private BundleEntity bundle;

@NotNull
@Enumerated(EnumType.STRING)
@Column(name = "status")
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
package enterprise.mappers;

import enterprise.dtos.CreditPackageDTO;
import enterprise.entities.CreditPackageEntity;
import org.mapstruct.Mapper;
import org.mapstruct.MappingConstants;

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

CreditPackageDTO entityToDTO(CreditPackageEntity creditPackageEntity);

}

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package enterprise.repositories;

import commons.springfw.impl.repositories.AbstractBaseRepository;
import enterprise.entities.CreditPackageEntity;

public interface CreditPackageRepository extends AbstractBaseRepository<CreditPackageEntity> {
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
package enterprise.rest;

import enterprise.dtos.CreditPackageDTO;
import enterprise.mappers.CreditPackageMapper;
import enterprise.services.CreditPackageService;
import green_buildings.commons.api.security.UserRole;
import jakarta.annotation.security.RolesAllowed;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;

@RestController
@RequestMapping("/api/credit-package")
@RequiredArgsConstructor
public class CreditPackageController {

private final CreditPackageService creditPackageService;
private final CreditPackageMapper mapper;

@GetMapping
@RolesAllowed({UserRole.RoleNameConstant.SYSTEM_ADMIN, UserRole.RoleNameConstant.ENTERPRISE_OWNER})
public List<CreditPackageDTO> findAll() {
return creditPackageService.findAll()
.stream()
.map(mapper::entityToDTO)
.toList();
}

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

import enterprise.entities.CreditPackageEntity;

import java.util.List;

public interface CreditPackageService {
List<CreditPackageEntity> findAll();
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
package enterprise.services;

import enterprise.entities.CreditPackageEntity;
import enterprise.repositories.CreditPackageRepository;
import jakarta.transaction.Transactional;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
@RequiredArgsConstructor
@Transactional(rollbackOn = Throwable.class)
public class CreditPackageServiceImpl implements CreditPackageService {

private final CreditPackageRepository creditPackageRepository;

@Override
public List<CreditPackageEntity> findAll() {
return creditPackageRepository.findAll();
}
}
1 change: 1 addition & 0 deletions sep490-enterprise/src/main/resources/application.yml
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ spring:
issuer-uri: ${ISSUER_URI}
application:
name: enterprise
homepage: http://localhost:4200
datasource:
url: jdbc:postgresql://${DB_HOST}:${DB_PORT}/${DB_NAME}?serverTimezone=UTC
username: ${POSTGRES_USER}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
ALTER TABLE payments DROP CONSTRAINT payments_fk_bundles;
ALTER TABLE payments DROP COLUMN bundle_id;
ALTER TABLE bundles RENAME TO credit_packages;

ALTER TABLE credit_packages
ADD COLUMN number_of_credits INT NOT NULL DEFAULT 0,
ADD COLUMN price BIGINT NOT NULL DEFAULT 0;
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ import {UUID} from '../../../../../types/uuid';
import {AppRoutingConstants} from '../../../../app-routing.constant';
import {BuildingService} from '../../../../services/building.service';
import {AbstractFormComponent} from '../../../shared/components/form/abstract-form-component';
import {BuildingDetails} from '../../models/building-details.dto';
import {BuildingDetails} from '../../models/enterprise.dto';

@Component({
selector: 'app-building-detail',
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ import {UUID} from '../../../../../types/uuid';
import {AppRoutingConstants} from '../../../../app-routing.constant';
import {BuildingService} from '../../../../services/building.service';
import {SubscriptionAwareComponent} from '../../../core/subscription-aware.component';
import {Building} from '../../models/building.dto';
import {Building} from '../../models/enterprise.dto';
import {MarkerService} from '../../services/marker.service';
import {RegionService} from '../../services/region.service';

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@
<div class="flex gap-2.5 flex-col">
<div class="flex items-center justify-between lg:flex-row gap-2.5">
<p-button
(onClick)="navigateToSubscription()"
severity="primary"
[label]="'payment.history.button.buyCredit' | translate"
outlined
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
import {Component, OnInit, TemplateRef, ViewChild} from '@angular/core';
import {Router} from '@angular/router';
import {AppRoutingConstants} from '../../../../app-routing.constant';
import {SubscriptionAwareComponent} from '../../../core/subscription-aware.component';
import {TableTemplateColumn} from '../../../shared/components/table-template/table-template.component';
import {
Expand Down Expand Up @@ -43,7 +45,8 @@ export class PaymentComponent
constructor(
protected readonly applicationService: ApplicationService,
private readonly paymentService: PaymentService,
private readonly walletService: WalletService
private readonly walletService: WalletService,
private readonly router: Router
) {
super();
}
Expand Down Expand Up @@ -96,4 +99,12 @@ export class PaymentComponent
})
);
}

navigateToSubscription(): void {
void this.router.navigate([
'/',
AppRoutingConstants.ENTERPRISE_PATH,
AppRoutingConstants.PLAN_PATH
]);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -96,7 +96,7 @@
</div>
<!-- Body: Credit Value -->
<div body class="text-lg font-semibold">
{{ package.credits }}
{{ package.numberOfCredits }}
{{ "payment.history.credit.title" | translate }}
</div>

Expand All @@ -105,7 +105,7 @@
footer
class="text-gray-600 text-base font-medium text-center"
>
{{ package.price }}
{{ package.price | number: "1.0-0" }} VND
</div>
</card-template>
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,43 +1,40 @@
import {Component, OnInit} from '@angular/core';
import {UUID} from '../../../../../types/uuid';
import {SubscriptionAwareComponent} from '../../../core/subscription-aware.component';
import {CreditPackage} from '../../models/enterprise.dto';
import {CreditPackageService} from '../../services/credit-package.service';
import {WalletService} from '../../services/wallet.service';

interface CreditPackage {
id: number;
credits: number;
price: string;
}
@Component({
selector: 'app-subscriptions',
templateUrl: './subscription.component.html',
styleUrl: './subscription.component.css'
templateUrl: './plan.component.html',
styleUrl: './plan.component.css'
})
export class SubscriptionComponent
export class PlanComponent
extends SubscriptionAwareComponent
implements OnInit
{
tabs = [
{title: 'purchaseCredit.about', content: 'Content 1', value: '0'},
{title: 'purchaseCredit.termService', content: 'Content 2', value: '1'}
];

creditPackages: CreditPackage[] = [
{id: 1, credits: 100, price: '10.000.000 vnđ'},
{id: 2, credits: 100, price: '10.000.000 vnđ'},
{id: 3, credits: 100, price: '10.000.000 vnđ'},
{id: 4, credits: 100, price: '10.000.000 vnđ'},
{id: 5, credits: 100, price: '10.000.000 vnđ'}
];

selectedPackageId: number | null = null;
creditPackages: CreditPackage[] = [];
selectedPackageId: UUID | null = null;
balance: number = 0;
constructor(private readonly walletService: WalletService) {

constructor(
private readonly walletService: WalletService,
private readonly creditPackageService: CreditPackageService
) {
super();
}

ngOnInit(): void {
this.getBalance();
this.getCreditPackages();
}
selectPackage(id: number): void {

selectPackage(id: UUID): void {
this.selectedPackageId = id;
}

Expand All @@ -46,11 +43,20 @@ export class SubscriptionComponent
// Handle purchase logic
}
}

getBalance(): void {
this.registerSubscription(
this.walletService.getWalletBalance().subscribe(result => {
this.balance = result;
})
);
}

getCreditPackages(): void {
this.registerSubscription(
this.creditPackageService.getAllCreditPackages().subscribe(rs => {
this.creditPackages = rs;
})
);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import {AppRoutingConstants} from '../../app-routing.constant';
import {BuildingDetailsComponent} from './components/building-details/building-details.component';
import {BuildingsComponent} from './components/buildings/buildings.component';
import {PaymentComponent} from './components/payment/payment.component';
import {SubscriptionComponent} from './components/subscription/subscription.component';
import {PlanComponent} from './components/plan/plan.component';
import {EnterpriseComponent} from './enterprise.component';

const routes: Routes = [
Expand All @@ -22,7 +22,7 @@ const routes: Routes = [
},
{
path: AppRoutingConstants.PLAN_PATH,
component: SubscriptionComponent
component: PlanComponent
},
{path: AppRoutingConstants.PAYMENT_PATH, component: PaymentComponent}
]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,10 @@ import {SharedModule} from '../shared/shared.module';
import {BuildingDetailsComponent} from './components/building-details/building-details.component';
import {BuildingsComponent} from './components/buildings/buildings.component';
import {PaymentComponent} from './components/payment/payment.component';
import {SubscriptionComponent} from './components/subscription/subscription.component';
import {PlanComponent} from './components/plan/plan.component';
import {EnterpriseRoutingModule} from './enterprise-routing.module';
import {EnterpriseComponent} from './enterprise.component';
import {CreditPackageService} from './services/credit-package.service';
import {MarkerService} from './services/marker.service';
import {PaymentService} from './services/payment.service';
import {PopupService} from './services/popup.service';
Expand All @@ -15,7 +16,7 @@ import {WalletService} from './services/wallet.service';
@NgModule({
declarations: [
EnterpriseComponent,
SubscriptionComponent,
PlanComponent,
PaymentComponent,
BuildingsComponent,
BuildingDetailsComponent
Expand All @@ -26,7 +27,8 @@ import {WalletService} from './services/wallet.service';
PopupService,
RegionService,
PaymentService,
WalletService
WalletService,
CreditPackageService
]
})
export class EnterpriseModule {}

This file was deleted.

Loading

0 comments on commit b8f8e1b

Please sign in to comment.