Add Instagram-style social features and Postman collections
هذا الالتزام موجود في:
46
src/modules/reports/schemas/report.schema.ts
Normal file
46
src/modules/reports/schemas/report.schema.ts
Normal file
@@ -0,0 +1,46 @@
|
||||
import { Prop, Schema, SchemaFactory } from '@nestjs/mongoose';
|
||||
import { HydratedDocument, Types } from 'mongoose';
|
||||
import { ReportReason } from '../../../common/enums/report-reason.enum';
|
||||
import { User } from '../../users/schemas/user.schema';
|
||||
|
||||
export type ReportDocument = HydratedDocument<Report>;
|
||||
|
||||
export const REPORT_TARGET_TYPES = ['user', 'post', 'comment', 'listing', 'repair_shop'] as const;
|
||||
export type ReportTargetType = (typeof REPORT_TARGET_TYPES)[number];
|
||||
|
||||
export const REPORT_STATUSES = ['open', 'in_review', 'resolved', 'rejected'] as const;
|
||||
export type ReportStatus = (typeof REPORT_STATUSES)[number];
|
||||
|
||||
@Schema({ timestamps: true, versionKey: false })
|
||||
export class Report {
|
||||
@Prop({ type: Types.ObjectId, ref: User.name, required: true, index: true })
|
||||
reporterId!: Types.ObjectId;
|
||||
|
||||
@Prop({ type: String, enum: REPORT_TARGET_TYPES, required: true, index: true })
|
||||
targetType!: ReportTargetType;
|
||||
|
||||
@Prop({ type: Types.ObjectId, required: true, index: true })
|
||||
targetId!: Types.ObjectId;
|
||||
|
||||
@Prop({ type: String, enum: Object.values(ReportReason), required: true, index: true })
|
||||
reason!: ReportReason;
|
||||
|
||||
@Prop({ default: '', trim: true, maxlength: 2000 })
|
||||
details!: string;
|
||||
|
||||
@Prop({ type: String, enum: REPORT_STATUSES, default: 'open', index: true })
|
||||
status!: ReportStatus;
|
||||
|
||||
@Prop({ default: '', trim: true, maxlength: 300 })
|
||||
resolutionNote!: string;
|
||||
|
||||
@Prop({ type: String, default: '', index: true })
|
||||
resolvedBy!: string;
|
||||
|
||||
@Prop({ type: Date, default: null })
|
||||
resolvedAt!: Date | null;
|
||||
}
|
||||
|
||||
export const ReportSchema = SchemaFactory.createForClass(Report);
|
||||
ReportSchema.index({ reporterId: 1, targetType: 1, targetId: 1 }, { unique: true });
|
||||
ReportSchema.index({ status: 1, createdAt: -1 });
|
||||
المرجع في مشكلة جديدة
حظر مستخدم