backend/api/v1/me/friends/
mod.rs1use actix_web::{HttpRequest, HttpResponse, get, post, web};
2use serde::Deserialize;
3
4pub mod uuid;
5
6use crate::{
7 Data,
8 api::v1::auth::check_access_token,
9 error::Error,
10 objects::Me,
11 utils::{get_auth_header, global_checks, user_uuid_from_username}
12};
13
14#[get("/friends")]
16pub async fn get(req: HttpRequest, data: web::Data<Data>) -> Result<HttpResponse, Error> {
17 let headers = req.headers();
18
19 let auth_header = get_auth_header(headers)?;
20
21 let mut conn = data.pool.get().await?;
22
23 let uuid = check_access_token(auth_header, &mut conn).await?;
24
25 global_checks(&data, uuid).await?;
26
27 let me = Me::get(&mut conn, uuid).await?;
28
29 let friends = me.get_friends(&data).await?;
30
31 Ok(HttpResponse::Ok().json(friends))
32}
33
34#[derive(Deserialize)]
35struct UserReq {
36 username: String,
37}
38
39#[post("/friends")]
59pub async fn post(
60 req: HttpRequest,
61 json: web::Json<UserReq>,
62 data: web::Data<Data>,
63) -> Result<HttpResponse, Error> {
64 let headers = req.headers();
65
66 let auth_header = get_auth_header(headers)?;
67
68 let mut conn = data.pool.get().await?;
69
70 let uuid = check_access_token(auth_header, &mut conn).await?;
71
72 global_checks(&data, uuid).await?;
73
74 let me = Me::get(&mut conn, uuid).await?;
75
76 let target_uuid = user_uuid_from_username(&mut conn, &json.username).await?;
77 me.add_friend(&mut conn, target_uuid).await?;
78
79 Ok(HttpResponse::Ok().finish())
80}