import { ApiHideProperty } from '@nestjs/swagger';
import { Exclude } from 'class-transformer';
import { BaseEntity } from '@/database';
import { Post } from '@/modules/post';
import { Role } from '@/modules/role';
import { Column, Entity, JoinTable, ManyToMany, RelationId } from 'typeorm';

@Entity({ orderBy: { id: 'DESC' } })
export class User extends BaseEntity {
  /**
   * 登录账号
   * @example 'juetan'
   */
  @Column({ length: 48 })
  username: string;

  /**
   * 用户昵称
   * @example '绝弹'
   */
  @Column({ length: 48 })
  nickname: string;

  /**
   * 用户介绍
   * @example '这个人很懒, 什么也没有留下!'
   */
  @Column({ default: '这个人很懒, 什么也没有留下!' })
  description: string;

  /**
   * 用户头像(URL)
   * @example './assets/222421415123.png '
   */
  @Column({ nullable: true })
  avatar: string;

  /**
   * 用户密码
   * @example 'password'
   */
  @Exclude()
  @Column({ length: 64 })
  password: string;

  /**
   * 用户邮箱
   * @example 'example@mail.com'
   */
  @Column({ length: 64, nullable: true })
  email: string;

  /**
   * 用户文章
   */
  @ApiHideProperty()
  @ManyToMany(() => Post, (post) => post.author)
  @JoinTable()
  posts: Post[];

  /**
   * 用户角色
   */
  @ApiHideProperty()
  @ManyToMany(() => Role, (role) => role.user)
  @JoinTable()
  roles: Role[];

  @RelationId('roles')
  roleIds: number[];
}
