Skip to main content

aj_models/
users.rs

1//! Structs for users
2
3use chrono::{DateTime, Utc};
4use serde::{Deserialize, Serialize};
5
6/// Register request called from frontend
7#[derive(Clone, Debug, Serialize, Deserialize)]
8pub struct RegisterRequest {
9    /// Login
10    pub login: String,
11    /// Password
12    pub password: String,
13    /// Password confirmation
14    pub password_confirmation: String,
15}
16
17/// Login request called from frontend
18#[derive(Clone, Debug, Serialize, Deserialize)]
19pub struct LoginRequest {
20    /// Login
21    pub login: String,
22    /// Password
23    pub password: String,
24}
25
26/// Admin level
27#[derive(Clone, PartialEq, Eq, Debug, Serialize, Deserialize, PartialOrd, Ord)]
28#[cfg_attr(feature = "sqlx", derive(sqlx::Type))]
29#[cfg_attr(
30    feature = "sqlx",
31    sqlx(type_name = "admin_level", rename_all = "snake_case")
32)]
33#[serde(rename_all = "snake_case")]
34pub enum AdminLevel {
35    /// Not admin: can create private contests only
36    NotAdmin,
37    /// Beta tester: just a status
38    BetaTester,
39    /// Admin level: can create public contests and edit them
40    Admin,
41    /// Owner: can manage users, edit and view any public contest
42    Owner,
43}
44
45/// User data which is avaible for all users
46#[derive(Deserialize, Serialize, Clone, Debug)]
47pub struct PublicUserData {
48    /// User id
49    pub id: i64,
50    /// Login
51    pub login: String,
52    /// Admin level
53    pub admin_level: AdminLevel,
54}
55
56/// User data which is avaible only for user
57#[derive(Deserialize, Serialize, Clone, Debug)]
58pub struct PrivateUserData {
59    /// User id
60    pub id: i64,
61    /// Login
62    pub login: String,
63    /// Admin level
64    pub admin_level: AdminLevel,
65    /// Timestamp when account was created
66    pub created_at: DateTime<Utc>,
67}