# User features

## Login/Sign up rules.

- User data is stored sepatately from Firebase Auth and will be stored in this server.
- User fields:
  - `uid`: Public field. Unique ID for each user. Same as Firebase Auth's `uid`. CANNOT-UPDATE.
  - `avatar`: Public field. URL to user's avatar. Will use photoURL from Firebase Auth if haven't set.
  - `name`: Public field. User's name. Will use displayName from Firebase Auth if haven't set.
  - `level`: Public field. User's level. Default is 1.
  - `vip_level`: Public field. User's VIP level. Default is 0.
  - `coins`: Public field. User's coins. Default is 0.
  - `has_purchased_no_ads`: Public field. User's no ads status. Default is false.
  - `email`: Private field. User's email. Will use email from Firebase Auth if haven't set.
  - `settings`: Private field. User's settings. Default is empty object.
  - `is_admin`: Private field. User's admin status. Default is false.
  - `created_at`: Private field. User's created time. Default is current time.
  - `admin_level`: Private field. User's admin level. Default is 0.****
- Related to user-data: Will be stored in this server. Use `user_uid` to identify user.
  - `favorite_games`: List of user's favorite games. Default is empty list. Cannot be accessed by other users if don't set to public.
  - `user_collections`: List of user's collections. Default is empty list. Cannot be accessed by other users if don't set to public.
  - `play_history`: List of user's game played history. Default is empty list. Cannot be accessed by other users if don't set to public.
  - `play_progress`: List of user's play progress of each game. Used to store game progress base on user. Default is empty list. Cannot be accessed by other users if don't set to public.