Selaa lähdekoodia

Create get one route and docs for logout

Lee Morgan 1 kuukausi sitten
vanhempi
sitoutus
41bc97abbe

+ 3 - 0
docs/openapi.yaml

@@ -39,3 +39,6 @@ paths:
   /user/login:
     post:
       $ref: "./paths/user/login.yaml"
+  /user/logout:
+    get:
+      $ref: "./paths/user/logout.yaml"

+ 18 - 0
docs/paths/user/logout.yaml

@@ -0,0 +1,18 @@
+operationId: userLogout
+summary: Log out
+security: []
+description: User log out
+tags: [User]
+
+responses:
+  "200":
+    description: Log out successful. Returns success object
+    content:
+      application/json:
+        schema:
+          type: object
+          properties:
+            success:
+              type: boolean
+  "500":
+    $ref: "#/components/responses/500"

+ 1 - 1
src/auth.rs

@@ -15,7 +15,7 @@ struct UserJwt{
     session_token: Uuid
 }
 
-pub async fn user_auth(db: &PgPool, req: HttpRequest) -> Result<User, HttpError> {
+pub async fn user_auth(db: &PgPool, req: &HttpRequest) -> Result<User, HttpError> {
     let cookie = req.cookie("user").ok_or(HttpError::Auth)?;
     let user_data = decode::<UserJwt>(
         &cookie.value(),

+ 15 - 0
src/controllers/user/get_one.rs

@@ -0,0 +1,15 @@
+use actix_web::{HttpResponse, HttpRequest, web, get};
+use sqlx::PgPool;
+use crate::{
+    http_error::HttpError,
+    auth::user_auth
+};
+
+#[get("/user")]
+pub async fn route(
+    db: web::Data<PgPool>,
+    req: HttpRequest
+) -> Result<HttpResponse, HttpError> {
+    let user = user_auth(&db, &req).await?;
+    Ok(HttpResponse::Ok().json(user.response()))
+}

+ 1 - 0
src/controllers/user/mod.rs

@@ -1,2 +1,3 @@
 pub mod create;
 pub mod login;
+pub mod get_one;

+ 4 - 2
src/models/user.rs

@@ -19,7 +19,8 @@ pub struct User {
 pub struct ResponseUser {
     id: String,
     name: String,
-    email: String
+    email: String,
+    tokens: i64
 }
 
 impl User {
@@ -100,7 +101,8 @@ impl User {
         ResponseUser {
             id: self.id.to_string(),
             name: self.name,
-            email: self.email
+            email: self.email,
+            tokens: self.tokens
         }
     }
 }

+ 3 - 1
src/routes/user.rs

@@ -1,10 +1,12 @@
 use actix_web::web;
 use crate::controllers::user::{
     create,
-    login
+    login,
+    get_one
 };
 
 pub fn config(cfg: &mut web::ServiceConfig) {
     cfg.service(create::route);
     cfg.service(login::route);
+    cfg.service(get_one::route);
 }