73 lines
1.7 KiB
TypeScript
73 lines
1.7 KiB
TypeScript
import { Prop, Schema, SchemaFactory } from '@nestjs/mongoose'
|
|
import { Document, Types } from 'mongoose'
|
|
|
|
export type ShareRecordDocument = ShareRecord & Document
|
|
export type ShareVisitDocument = ShareVisit & Document
|
|
|
|
@Schema({ timestamps: true })
|
|
export class ShareRecord {
|
|
@Prop({ type: Types.ObjectId, ref: 'User', required: true })
|
|
userId: Types.ObjectId
|
|
|
|
@Prop({ required: true, unique: true })
|
|
shareCode: string
|
|
|
|
@Prop({ default: 'app' })
|
|
type: string
|
|
|
|
@Prop({ default: '' })
|
|
refId: string
|
|
|
|
@Prop({ default: '' })
|
|
title: string
|
|
|
|
@Prop({ default: '' })
|
|
description: string
|
|
|
|
@Prop({ default: 'link' })
|
|
channel: string
|
|
|
|
@Prop({ default: 0 })
|
|
visitCount: number
|
|
|
|
@Prop({ default: 0 })
|
|
creditedCount: number
|
|
|
|
@Prop({ default: true })
|
|
isActive: boolean
|
|
|
|
readonly createdAt?: Date
|
|
readonly updatedAt?: Date
|
|
}
|
|
|
|
@Schema({ timestamps: true })
|
|
export class ShareVisit {
|
|
@Prop({ type: Types.ObjectId, ref: 'ShareRecord', required: true })
|
|
shareId: Types.ObjectId
|
|
|
|
@Prop({ type: Types.ObjectId, ref: 'User', required: true })
|
|
sharerId: Types.ObjectId
|
|
|
|
@Prop({ required: true })
|
|
visitorId: string
|
|
|
|
@Prop({ type: Types.ObjectId, ref: 'User' })
|
|
visitorUserId: Types.ObjectId
|
|
|
|
@Prop({ default: false })
|
|
credited: boolean
|
|
|
|
@Prop()
|
|
creditedAt?: Date
|
|
|
|
readonly createdAt?: Date
|
|
readonly updatedAt?: Date
|
|
}
|
|
|
|
export const ShareRecordSchema = SchemaFactory.createForClass(ShareRecord)
|
|
export const ShareVisitSchema = SchemaFactory.createForClass(ShareVisit)
|
|
|
|
ShareRecordSchema.index({ userId: 1, createdAt: -1 })
|
|
ShareVisitSchema.index({ shareId: 1, visitorId: 1 }, { unique: true })
|
|
ShareVisitSchema.index({ sharerId: 1, createdAt: -1 })
|