update: remove the blog from the response of the update or create blog

This commit is contained in:
mahyargdz
2025-09-03 08:59:17 +03:30
parent 672fe9b783
commit 5e0bd3dce7
24 changed files with 526 additions and 385 deletions
@@ -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();