175 lines
6.5 KiB
TypeScript
Executable File
175 lines
6.5 KiB
TypeScript
Executable File
import { Exclude } from "class-transformer";
|
|
import { Column, DeleteDateColumn, Entity, JoinTable, ManyToMany, ManyToOne, OneToMany, OneToOne } from "typeorm";
|
|
|
|
import { LegalUser } from "./legal-user.entity";
|
|
import { RealUser } from "./real-user.entity";
|
|
import { RefreshToken } from "./refresh-token.entity";
|
|
import { Role } from "./role.entity";
|
|
import { UserGroup } from "./user-group.entity";
|
|
import { BaseEntity } from "../../../common/entities/base.entity";
|
|
import { UserAnnouncement } from "../../announcements/entities/user-announcement.entity";
|
|
import { BlogComment } from "../../blogs/entities/blog-comment.entity";
|
|
import { Blog } from "../../blogs/entities/blog.entity";
|
|
import { Criticism } from "../../criticisms/entities/criticism.entity";
|
|
import { DanakServiceAudio } from "../../danak-services/entities/danak-service-audio.entity";
|
|
import { DanakServiceFeedback } from "../../danak-services/entities/danak-service-feedback.entity";
|
|
import { DanakServiceReview } from "../../danak-services/entities/danak-service-review.entity";
|
|
import { DanakServiceVideo } from "../../danak-services/entities/danak-service-video.entity";
|
|
import { Discount } from "../../discounts/entities/discount.entity";
|
|
import { Invoice } from "../../invoices/entities/invoice.entity";
|
|
import { LearningProgress } from "../../learnings/entities/learning-progress.entity";
|
|
import { Notification } from "../../notifications/entities/notification.entity";
|
|
import { Payment } from "../../payments/entities/payment.entity";
|
|
import { ReferralCode } from "../../referrals/entities/referral-code.entity";
|
|
import { ReferralReward } from "../../referrals/entities/referral-reward.entity";
|
|
import { Referral } from "../../referrals/entities/referral.entity";
|
|
import { UserSetting } from "../../settings/entities/user-setting.entity";
|
|
import { UserQuickAccess } from "../../subscriptions/entities/user-quick-access.entity";
|
|
import { UserSubscription } from "../../subscriptions/entities/user-subscription.entity";
|
|
import { TicketMessage } from "../../tickets/entities/ticket-message.entity";
|
|
import { Ticket } from "../../tickets/entities/ticket.entity";
|
|
import { Wallet } from "../../wallets/entities/wallet.entity";
|
|
import { FinancialType } from "../enums/financial-type.enum";
|
|
import { Reseller } from "./reseller.entity";
|
|
|
|
@Entity()
|
|
export class User extends BaseEntity {
|
|
@Column({ type: "varchar", length: 150, nullable: true })
|
|
email: string;
|
|
|
|
@Column({ type: "varchar", length: 11, unique: true, nullable: false })
|
|
phone: string;
|
|
|
|
@Column({ type: "varchar", length: 50, unique: true, nullable: true })
|
|
userName: string;
|
|
|
|
@Exclude()
|
|
@Column({ type: "varchar", length: 150 })
|
|
password: string;
|
|
|
|
@Column({ type: "varchar", length: 150 })
|
|
firstName: string;
|
|
|
|
@Column({ type: "varchar", length: 200 })
|
|
lastName: string;
|
|
|
|
@Column({ type: "varchar", length: 12, nullable: true })
|
|
birthDate?: string;
|
|
|
|
@Column({ type: "varchar", length: 100, unique: true, nullable: true })
|
|
nationalCode?: string;
|
|
|
|
@Column({ type: "varchar", length: 100, nullable: true })
|
|
profilePic?: string;
|
|
|
|
@Column({ type: "boolean", default: false })
|
|
emailVerified: boolean;
|
|
|
|
@Column({ type: "enum", enum: FinancialType, nullable: true, default: null })
|
|
financialType: FinancialType | null;
|
|
|
|
@DeleteDateColumn({ nullable: true })
|
|
deletedAt?: Date;
|
|
|
|
//-----------------------------------------
|
|
|
|
@ManyToMany(() => Role, (role) => role.users)
|
|
@JoinTable({ name: "user_role_relation" })
|
|
roles: Role[];
|
|
|
|
@ManyToMany(() => UserGroup, (group) => group.users)
|
|
groups: UserGroup[];
|
|
|
|
//---------------------------------------
|
|
|
|
@OneToMany(() => DanakServiceAudio, (danakServiceAudio) => danakServiceAudio.createBy)
|
|
audios: DanakServiceAudio[];
|
|
|
|
@OneToMany(() => DanakServiceVideo, (danakServiceVideo) => danakServiceVideo.createBy)
|
|
videos: DanakServiceVideo[];
|
|
|
|
@OneToMany(() => DanakServiceReview, (danakServiceReview) => danakServiceReview.user)
|
|
reviews: DanakServiceReview[];
|
|
|
|
@OneToMany(() => DanakServiceFeedback, (feedback) => feedback.user)
|
|
serviceFeedbacks: DanakServiceFeedback[];
|
|
|
|
@OneToMany(() => Blog, (blog) => blog.author)
|
|
blogs: Blog[];
|
|
|
|
@OneToMany(() => BlogComment, (blogComment) => blogComment.user)
|
|
blogComments: BlogComment[];
|
|
|
|
@OneToMany(() => Ticket, (ticket) => ticket.user)
|
|
tickets: Ticket[];
|
|
|
|
@OneToMany(() => TicketMessage, (ticketMessage) => ticketMessage.author)
|
|
ticketMessage: TicketMessage[];
|
|
|
|
@OneToMany(() => Criticism, (criticism) => criticism.user)
|
|
criticisms: Criticism[];
|
|
|
|
@OneToMany(() => UserSetting, (settings) => settings.user, { nullable: false })
|
|
settings: UserSetting;
|
|
|
|
@OneToOne(() => Wallet, (wallet) => wallet.user)
|
|
wallet: Wallet;
|
|
|
|
@OneToMany(() => Payment, (payment) => payment.user)
|
|
payments: Payment[];
|
|
|
|
@OneToMany(() => Notification, (notification) => notification.recipient)
|
|
notifications: Notification[];
|
|
|
|
@OneToMany(() => UserSubscription, (subscription) => subscription.user)
|
|
subscriptions: UserSubscription[];
|
|
|
|
@OneToMany(() => Invoice, (invoice) => invoice.user)
|
|
invoices: Invoice[];
|
|
|
|
@OneToMany(() => LearningProgress, (learningProgress) => learningProgress.learning)
|
|
learningProgress: LearningProgress[];
|
|
|
|
@OneToOne(() => RealUser, (realUser) => realUser.user, { cascade: true, nullable: true })
|
|
realUser: RealUser;
|
|
|
|
@OneToOne(() => LegalUser, (legalUser) => legalUser.user, { cascade: true, nullable: true })
|
|
legalUser: LegalUser;
|
|
|
|
// @ManyToMany(() => UsageDiscount, (usageDiscount) => usageDiscount.users)
|
|
// usageDiscounts: UsageDiscount[];
|
|
|
|
@OneToMany(() => Discount, (discount) => discount.user)
|
|
discounts: Discount[];
|
|
|
|
@OneToMany(() => UserAnnouncement, (userAnnouncement) => userAnnouncement.user)
|
|
userAnnouncements: UserAnnouncement[];
|
|
|
|
@OneToMany(() => UserQuickAccess, (quickAccess) => quickAccess.user)
|
|
quickAccesses: UserQuickAccess[];
|
|
|
|
@OneToMany(() => RefreshToken, (refreshToken) => refreshToken.user, { cascade: true })
|
|
refreshTokens: RefreshToken[];
|
|
|
|
@OneToOne(() => ReferralCode, (code) => code.user)
|
|
referralCode: ReferralCode;
|
|
|
|
@OneToMany(() => Referral, (referral) => referral.referrer)
|
|
referrals: Referral[];
|
|
|
|
@OneToMany(() => Referral, (referral) => referral.referredUser)
|
|
referredBy: Referral[];
|
|
|
|
@OneToMany(() => ReferralReward, (reward) => reward.user)
|
|
referralRewards: ReferralReward[];
|
|
|
|
//---------------------------------------
|
|
|
|
@ManyToOne(() => Reseller, (reseller) => reseller.agents, { nullable: true })
|
|
reseller?: Reseller
|
|
|
|
|
|
@OneToOne(() => Reseller, reseller => reseller.owner, { nullable: true })
|
|
ownedReseller?: Reseller
|
|
}
|