update: remove the blog from the response of the update or create blog
This commit is contained in:
@@ -5,6 +5,7 @@ import dayjs from "dayjs";
|
||||
import Decimal from "decimal.js";
|
||||
import { Between, DataSource, In, QueryRunner } from "typeorm";
|
||||
|
||||
import { IUserIpAndHeaders } from "../../../common/decorators/user.decorator";
|
||||
import { AuthMessage, InvoiceMessage, WalletMessage } from "../../../common/enums/message.enum";
|
||||
import { OperationType } from "../../access-logs/enums/operation-type.enum";
|
||||
import { UserType } from "../../access-logs/enums/user-type.enum";
|
||||
@@ -56,7 +57,7 @@ export class InvoicesService {
|
||||
|
||||
///********************************** */
|
||||
|
||||
async createInvoiceAdmin(createDto: CreateInvoiceDto, userId: string) {
|
||||
async createInvoiceAdmin(createDto: CreateInvoiceDto, userIpAndHeaders: IUserIpAndHeaders) {
|
||||
const queryRunner = this.dataSource.createQueryRunner();
|
||||
|
||||
try {
|
||||
@@ -83,7 +84,7 @@ export class InvoicesService {
|
||||
const dueDate = dayjs().add(INVOICE.DUEDATE, "day").toDate();
|
||||
|
||||
const invoice = queryRunner.manager.create(this.invoiceRepository.target, {
|
||||
user: { id: userId },
|
||||
user: { id: createDto.userId },
|
||||
totalPrice: totalPrice.add(tax).toNumber(),
|
||||
originalPrice: totalPrice.add(tax).toNumber(),
|
||||
items: invoiceItems,
|
||||
@@ -113,9 +114,12 @@ export class InvoicesService {
|
||||
|
||||
await this.scheduleInvoiceJobs(invoice, createDto);
|
||||
|
||||
await this.accessLogService.logCreate("Invoice", invoice.id, createDto, {
|
||||
user: { id: userId },
|
||||
userType: UserType.ADMIN,
|
||||
await this.accessLogService.logCreate("Invoice", UserType.ADMIN, {
|
||||
user: { id: userIpAndHeaders.userId },
|
||||
endpoint: "/invoices",
|
||||
requestId: userIpAndHeaders.headers["x-request-id"],
|
||||
ipAddress: userIpAndHeaders.ip,
|
||||
userAgent: userIpAndHeaders.headers["user-agent"],
|
||||
actionDescription: `Admin created invoice: ${invoice.numericId}`,
|
||||
metadata: {
|
||||
items: invoiceItems.map((item) => item.name).join(", "),
|
||||
@@ -141,7 +145,7 @@ export class InvoicesService {
|
||||
|
||||
//********************************** */
|
||||
|
||||
async updateInvoiceAdmin(invoiceId: string, updateDto: UpdateInvoiceDto, userId: string) {
|
||||
async updateInvoiceAdmin(invoiceId: string, updateDto: UpdateInvoiceDto, userIpAndHeaders: IUserIpAndHeaders) {
|
||||
const queryRunner = this.dataSource.createQueryRunner();
|
||||
|
||||
try {
|
||||
@@ -204,10 +208,15 @@ export class InvoicesService {
|
||||
|
||||
await queryRunner.commitTransaction();
|
||||
|
||||
await this.accessLogService.logUpdate("Invoice", invoice.id, updateDto, {
|
||||
user: { id: userId },
|
||||
userType: UserType.ADMIN,
|
||||
await this.accessLogService.logUpdate("Invoice", invoice.id, UserType.ADMIN, {
|
||||
user: { id: userIpAndHeaders.userId },
|
||||
endpoint: "/invoices",
|
||||
requestId: userIpAndHeaders.headers["x-request-id"],
|
||||
ipAddress: userIpAndHeaders.ip,
|
||||
userAgent: userIpAndHeaders.headers["user-agent"],
|
||||
actionDescription: `Admin updated invoice: ${invoice.numericId}`,
|
||||
oldValues: JSON.stringify({ ...invoice }),
|
||||
newValues: JSON.stringify({ ...updateDto }),
|
||||
});
|
||||
|
||||
return {
|
||||
@@ -224,7 +233,7 @@ export class InvoicesService {
|
||||
|
||||
//********************************** */
|
||||
|
||||
async deleteInvoiceAdmin(invoiceId: string, userId: string) {
|
||||
async deleteInvoiceAdmin(invoiceId: string, userIpAndHeaders: IUserIpAndHeaders) {
|
||||
const queryRunner = this.dataSource.createQueryRunner();
|
||||
|
||||
try {
|
||||
@@ -245,10 +254,16 @@ export class InvoicesService {
|
||||
|
||||
await queryRunner.manager.remove(this.invoiceRepository.target, invoice);
|
||||
|
||||
await this.accessLogService.logDelete("Invoice", invoice.id, invoice, {
|
||||
user: { id: userId },
|
||||
userType: UserType.ADMIN,
|
||||
await this.accessLogService.logDelete("Invoice", invoice.id, UserType.ADMIN, {
|
||||
user: { id: userIpAndHeaders.userId },
|
||||
endpoint: "/invoices",
|
||||
requestId: userIpAndHeaders.headers["x-request-id"],
|
||||
ipAddress: userIpAndHeaders.ip,
|
||||
userAgent: userIpAndHeaders.headers["user-agent"],
|
||||
actionDescription: `Admin deleted invoice: ${invoice.numericId}`,
|
||||
metadata: {
|
||||
items: invoice.items.map((item) => item.name).join(", "),
|
||||
},
|
||||
});
|
||||
|
||||
await queryRunner.commitTransaction();
|
||||
@@ -326,16 +341,16 @@ export class InvoicesService {
|
||||
|
||||
//********************************** */
|
||||
|
||||
async approveInvoiceRequest(invoiceId: string, userId: string) {
|
||||
async approveInvoiceRequest(invoiceId: string, userIpAndHeaders: IUserIpAndHeaders) {
|
||||
const queryRunner = this.dataSource.createQueryRunner();
|
||||
|
||||
try {
|
||||
await queryRunner.connect();
|
||||
await queryRunner.startTransaction();
|
||||
|
||||
const user = await this.usersService.findOneByIdWithQueryRunner(userId, queryRunner);
|
||||
const user = await this.usersService.findOneByIdWithQueryRunner(userIpAndHeaders.userId, queryRunner);
|
||||
|
||||
const invoice = await this.validateInvoiceForApproval(invoiceId, userId, queryRunner);
|
||||
const invoice = await this.validateInvoiceForApproval(invoiceId, userIpAndHeaders.userId, queryRunner);
|
||||
|
||||
const existCode = await this.otpService.checkExistOtp(user.phone, "INVOICE_VERIFY");
|
||||
if (existCode) {
|
||||
@@ -363,8 +378,11 @@ export class InvoicesService {
|
||||
invoiceId,
|
||||
`user approved invoice request: ${invoice.numericId}`,
|
||||
{
|
||||
user: { id: userId },
|
||||
user: { id: userIpAndHeaders.userId },
|
||||
userType: UserType.USER,
|
||||
ipAddress: userIpAndHeaders.ip,
|
||||
userAgent: userIpAndHeaders.headers["user-agent"],
|
||||
requestId: userIpAndHeaders.headers["x-request-id"],
|
||||
},
|
||||
);
|
||||
|
||||
@@ -384,7 +402,7 @@ export class InvoicesService {
|
||||
|
||||
//********************************** */
|
||||
|
||||
async approveInvoiceByUser(invoiceId: string, userId: string, verifyOtpDto: VerifyOtpWithUserId) {
|
||||
async approveInvoiceByUser(invoiceId: string, userIpAndHeaders: IUserIpAndHeaders, verifyOtpDto: VerifyOtpWithUserId) {
|
||||
const queryRunner = this.dataSource.createQueryRunner();
|
||||
|
||||
try {
|
||||
@@ -392,17 +410,17 @@ export class InvoicesService {
|
||||
await queryRunner.startTransaction();
|
||||
const { code } = verifyOtpDto;
|
||||
|
||||
const user = await this.usersService.findOneByIdWithQueryRunner(userId, queryRunner);
|
||||
const user = await this.usersService.findOneByIdWithQueryRunner(userIpAndHeaders.userId, queryRunner);
|
||||
|
||||
const isValid = await this.otpService.verifyOtp(user.phone, code, "INVOICE_VERIFY");
|
||||
if (!isValid) throw new BadRequestException(AuthMessage.INVALID_OTP);
|
||||
|
||||
const invoice = await this.validateInvoiceForApproval(invoiceId, userId, queryRunner);
|
||||
const invoice = await this.validateInvoiceForApproval(invoiceId, userIpAndHeaders.userId, queryRunner);
|
||||
|
||||
invoice.status = InvoiceStatus.WAIT_PAYMENT;
|
||||
await queryRunner.manager.save(Invoice, invoice);
|
||||
|
||||
await this.notificationQueue.addApprovedInvoiceNotification(userId, {
|
||||
await this.notificationQueue.addApprovedInvoiceNotification(userIpAndHeaders.userId, {
|
||||
invoiceId: invoice.numericId.toString(),
|
||||
dueDate: invoice.dueDate,
|
||||
createDate: invoice.createdAt,
|
||||
@@ -420,7 +438,10 @@ export class InvoicesService {
|
||||
invoiceId,
|
||||
`user approved invoice by user: ${invoice.numericId}`,
|
||||
{
|
||||
user: { id: userId },
|
||||
user: { id: userIpAndHeaders.userId },
|
||||
ipAddress: userIpAndHeaders.ip,
|
||||
userAgent: userIpAndHeaders.headers["user-agent"],
|
||||
requestId: userIpAndHeaders.headers["x-request-id"],
|
||||
userType: UserType.USER,
|
||||
},
|
||||
);
|
||||
@@ -681,7 +702,12 @@ export class InvoicesService {
|
||||
|
||||
//*********************************** */
|
||||
|
||||
async payInvoice(invoiceId: string, userId: string, queryRunner = this.dataSource.createQueryRunner()) {
|
||||
async payInvoice(
|
||||
invoiceId: string,
|
||||
userId: string,
|
||||
userIpAndHeaders?: IUserIpAndHeaders,
|
||||
queryRunner = this.dataSource.createQueryRunner(),
|
||||
) {
|
||||
let transactionStarted = false;
|
||||
|
||||
try {
|
||||
@@ -784,10 +810,15 @@ export class InvoicesService {
|
||||
paidAt: invoice.paidAt,
|
||||
});
|
||||
|
||||
await this.accessLogService.logUserAction(OperationType.UPDATE, "Invoice", invoiceId, `user paid invoice: ${invoice.numericId}`, {
|
||||
user: { id: userId },
|
||||
userType: UserType.USER,
|
||||
});
|
||||
if (userIpAndHeaders) {
|
||||
await this.accessLogService.logUserAction(OperationType.UPDATE, "Invoice", invoiceId, `user paid invoice: ${invoice.numericId}`, {
|
||||
user: { id: userIpAndHeaders.userId },
|
||||
ipAddress: userIpAndHeaders.ip,
|
||||
userAgent: userIpAndHeaders.headers["user-agent"],
|
||||
requestId: userIpAndHeaders.headers["x-request-id"],
|
||||
userType: UserType.USER,
|
||||
});
|
||||
}
|
||||
|
||||
if (transactionStarted) await queryRunner.commitTransaction();
|
||||
|
||||
|
||||
Reference in New Issue
Block a user