model.ts 5.01 KB
import { Tag } from '@/types/tag';
import { SystemRole } from '@/types/system-role';
import { Activity } from '@/types/activity';
import { AnyObject } from '@/types/global';

export interface BaseUser {
  id: number;
  avatar: string;
  nick_name: string;
  real_name: string;
  identity: number;
}

export interface User extends BaseUser {
  cover: string;
  sex: number;
  email: string;
  lang: string;
  area_code: string;
  phone: string;
  created_at: string;
  scope: number;
  demo_type: number;
  user_tag_id: number;
  official_status: number;
  status: number;
  company: string;
  province: string;
  city: string;
  intro: string;

  register_type?: number;
  inviter?: any;
  register_remark?: string;

  business_singer_limit: number;

  business?: BaseUser & { [K in keyof User]: User[K] };
  auth_tags?: Pick<Tag, 'id' | 'name'>[];
  style_tags?: Pick<Tag, 'id' | 'name'>[];

  // eslint-disable-next-line no-use-before-define
  projects?: Project[];
  roles?: SystemRole[];
  // eslint-disable-next-line no-use-before-define
  manage_projects?: Project[];
  opus?: Activity[];
  expand?: {
    recommend?: {
      activity?: string;
    };
  };
}

export interface UserDynamics {
  id: number;
  type: 'image' | 'audio' | 'video';
  intro: string;
  properties: object;
  is_top: number;
  created_at: string;
  updated_at: string;
}

export interface UserImageDynamics extends UserDynamics {
  properties: {
    url: string;
    [key: string]: unknown;
  };
}

export interface UserAudioDynamics extends UserDynamics {
  properties: {
    cover: {
      url: string;
      width: number;
      height: number;
    };
    url: string;
    [key: string]: unknown;
  };
}

export interface UserManageActivity {
  id: number;
  user: Pick<
    User,
    | 'id'
    | 'avatar'
    | 'nick_name'
    | 'real_name'
    | 'area_code'
    | 'phone'
    | 'email'
    | 'sex'
    | 'status'
    | 'register_type'
    | 'official_status'
    | 'inviter'
    | 'register_remark'
  >;
  permission: string[];
  activity_id: number;
  activity_name: string;
  activity_publish_at: string;
  activity_status: string;
}

export interface UserSubmitActivity {
  activity_cover: string;
  activity_name: string;
  activity_title: string;
  activity_status: number;
  status: number;
  sing_type: string;
  mode: number;
  demo_url: string;
  submit_at: string;
  // eslint-disable-next-line no-use-before-define
  project?: Project;
  tags?: Tag[];
}

export interface UserSubmitPrice {
  id: number;
  value: {
    year: string;
    ratio: number;
    amounts: number;
    is_reward: 1 | 0;
    is_dividend: 1 | 0;
  };
  is_deduct: 1 | 0;
  is_talk: 1 | 0;
  is_accept_address: 1 | 0;
  address: {
    name: string;
    parent: {
      name: string;
    };
  };
}

export interface UserMember {
  id: number;
  role: string;
  is_top: number;
  status: number;
  member_id: number;
  member: User;
}

interface UserCertifyRecord {
  id: number;
  status: number;
  reason?: string;
  operator_id: number;
  operator?: BaseUser & { [K in keyof User]: User[K] };
  updated_at: string;
}

export interface UserCertify {
  id: number;
  user_id: number;
  user?: Pick<
    User,
    | 'id'
    | 'avatar'
    | 'nick_name'
    | 'real_name'
    | 'sex'
    | 'identity'
    | 'auth_tags'
    | 'official_status'
    | 'inviter'
    | 'register_remark'
    | 'register_type'
  >;
  nick_name: string;
  register_type?: number;
  inviter?: any;
  register_remark?: string;
  works: string;
  reason?: string;
  audio_info?: {
    local?: string;
    online?: string;
  };
  img: string[];
  platform: string[];
  tags: number[];
  status: number;
  records: UserCertifyRecord[];
  created_at: string;
}

export interface BannerLink {
  title: string;
  cover: string;
  content: string;
  link_id: number;
  link_type: 1 | 2 | 3;
  link_name: string;
  desc1: string;
  desc2: string;
  desc3: string;
}

export interface Banner {
  id: number;
  name: string;
  cover: string;
  type: number;
  scope: number;
  permission: string[];
  content_picture: string;
  content: BannerLink[];
  status: number;
  weight: number;
}

export interface Project {
  id: number;
  name: string;
  cover: string;
  head_cover: string;
  intro: string;
  master_id: number;
  is_promote: number;
  is_public: number;
  is_can_apply: number;
  is_can_manage: number;
  is_can_demo_apply: number;
  is_demo_audit: number;
  status: number;

  user?: BaseUser & { [K in keyof User]: User[K] };
  master?: BaseUser & { [K in keyof User]: User[K] };

  // eslint-disable-next-line no-use-before-define
  managers: User[];

  activity_count?: number;
  activity_up_count?: number;
  activity_match_count?: number;
  activity_send_count?: number;

  demo_count?: number;
  demo_up_count?: number;
}

export interface Notification {
  id: number;
  title: string;
  type: number;
  content: string;
  cover: string;
  publish_type: number;
  publish_at?: string;
  publish_to: string[];
  link_type: 'none' | 'user' | 'activity' | 'project' | 'rich';
  link_id: number;
  is_alert: number;
  rich_content?: string;
  status: number;

  items_count?: number;
}