wip

Seto Elkahfi committed Aug 4, 2024 at 20:15 UTC bd6ecfdfd7484ecb45672c98931651d2aeea7cc9
6 files changed +58 -56
backend/musik88-web/app/controllers/api/v1/user_controller.rb
+2
@@ -7,9 +7,11 @@ module Api
7 def login
8 find_user
9 if @user&.valid_password?(params[:password])
10 + logger.debug 'User logged in.'
11 sign_in(:user, @user)
12 render_success
13 else
14 + logger.debug 'Invalid credentials.'
15 render_error 'Invalid credentials.'
16 end
17 end
frontend/splitfire-desktop/app/debug/page.tsx
+1 -1
@@ -9,7 +9,7 @@ import {
9 import { useEffect, useState } from "react";
10 import { TauriResponse } from "@/models/shared";
11 import { useLogger } from "@/lib/logger";
12 -import { LoadingView } from "@/components/ui/LoadingView";
12 +import { LoadingView } from "@/components/ui/loading-view";
13 import { Button } from "@/components/button";
14
15 enum State {
frontend/splitfire-desktop/app/login/page.tsx
+1 -1
@@ -10,7 +10,7 @@ import { AccountLoginResponse } from "@/models/account";
10 import { useRouter } from "next/navigation";
11 import { TauriResponse } from "@/models/shared";
12 import { Mode } from "@/models/mode";
13 -import { LoadingView } from "@/components/ui/LoadingView";
13 +import { LoadingView } from "@/components/ui/loading-view";
14 import { useLogger } from "@/lib/logger";
15 import { Button } from "@/components/button";
16
frontend/splitfire-desktop/app/split/_components/button-split.tsx
+1 -1
@@ -1,4 +1,4 @@
1 -import { LoadingView } from "@/components/ui/LoadingView";
1 +import { LoadingView } from "@/components/ui/loading-view";
2 import { UserContext } from "@/lib/current-user-context";
3 import { AudioFile, Status } from "@/models/audio-file";
4 import { CountdownTimerIcon, LapTimerIcon, RocketIcon } from "@radix-ui/react-icons";
frontend/splitfire-desktop/components/ui/loading-view.tsx renamed
+1 -1
@@ -1,6 +1,6 @@
1 export function LoadingView() {
2 // Tailwindcss loading spinner
3 - return <div className="flex justify-center items-center h-screen">
3 + return <div className="flex justify-center items-center">
4 <div className="animate-spin rounded-full h-32 w-32 border-t-2 border-b-2 border-red-500"></div>
5 </div>
6 }
\ No newline at end of file
frontend/splitfire-desktop/src-tauri/src/rest/account.rs
+52 -52
@@ -1,13 +1,17 @@
1 use crate::{
2 command::constants::{
3 - base_url_builder, PATH_ACCOUNT_LOGIN, PATH_ACCOUNT_LOGOUT, PATH_ACCOUNT_PROFILE, PATH_ACCOUNT_REGISTER
3 + base_url_builder, PATH_ACCOUNT_LOGIN, PATH_ACCOUNT_LOGOUT, PATH_ACCOUNT_PROFILE,
4 + PATH_ACCOUNT_REGISTER,
5 },
6 models::{
6 - account::{AccountLoginResponse, AccountProfileResponse, AccountRegisterResponse, LoginResponse, ProfileResponse, RegisterResponse},
7 + account::{
8 + AccountLoginResponse, AccountProfileResponse, AccountRegisterResponse, LoginResponse,
9 + ProfileResponse, RegisterResponse,
10 + },
11 player::TauriResponse,
12 },
13 };
10 -use log::debug;
14 +use log::{debug, error};
15 use reqwest::Client;
16 use serde_json::json;
17 use tauri;
@@ -29,65 +33,64 @@ pub async fn account_login(username: String, password: String) -> AccountLoginRe
33 .send()
34 .await;
35
32 - match response {
33 - Ok(response) => {
34 - let token = match response.headers().get("Authorization") {
35 - Some(token) => {
36 - // Trim Bearer prefix
37 - let token = match token.to_str() {
38 - Ok(token) => token.trim_start_matches("Bearer "),
39 - Err(e) => {
40 - println!("Failed to get token: {:?}", e);
41 - return AccountLoginResponse {
42 - status: TauriResponse::Error,
43 - message: "Failed to get token".to_string(),
44 - access_token: None,
45 - user: None,
46 - };
47 - }
48 - };
49 - Some(token.to_string())
50 - }
51 - None => {
52 - println!("Failed to get token");
53 - return AccountLoginResponse {
54 - status: TauriResponse::Error,
55 - message: "Failed to get token".to_string(),
56 - access_token: None,
57 - user: None,
58 - };
59 - }
36 + let res = match response {
37 + Ok(response) => response,
38 + Err(e) => {
39 + debug!("Failed to get response: {:?}", e);
40 + return AccountLoginResponse {
41 + status: TauriResponse::Error,
42 + message: e.to_string(),
43 + access_token: None,
44 + user: None,
45 };
61 - debug!("Token: {:?}", token);
62 - let res: LoginResponse = match response.json().await {
63 - Ok(json) => json,
46 + }
47 + };
48 + let token = match res.headers().get("Authorization") {
49 + Some(token) => {
50 + // Trim Bearer prefix
51 + let token = match token.to_str() {
52 + Ok(token) => token.trim_start_matches("Bearer "),
53 Err(e) => {
65 - println!("Failed to parse response: {:?}", e);
54 + error!("Cannot convert token to str: {:?}", e);
55 return AccountLoginResponse {
56 status: TauriResponse::Error,
68 - message: "Failed to parse response".to_string(),
57 + message: e.to_string(),
58 access_token: None,
59 user: None,
60 };
61 }
62 };
74 - debug!("Login response: {:?}", res);
75 - AccountLoginResponse {
76 - status: TauriResponse::Success,
77 - message: res.message,
78 - access_token: token,
79 - user: res.user,
80 - }
63 + Some(token.to_string())
64 }
65 + None => {
66 + error!("No Authorization header found.");
67 + return AccountLoginResponse {
68 + status: TauriResponse::Error,
69 + message: "No Authorization header found".to_string(),
70 + access_token: None,
71 + user: None,
72 + };
73 + }
74 + };
75 + debug!("Token: {:?}", token);
76 + let res: LoginResponse = match res.json().await {
77 + Ok(json) => json,
78 Err(e) => {
83 - println!("Failed to get response: {:?}", e);
84 - AccountLoginResponse {
79 + error!("Failed to parse response: {:?}", e);
80 + return AccountLoginResponse {
81 status: TauriResponse::Error,
86 - message: "Failed to get response".to_string(),
82 + message: e.to_string(),
83 access_token: None,
84 user: None,
89 - }
85 + };
86 }
87 + };
88 + debug!("Login response: {:?}", res);
89 + AccountLoginResponse {
90 + status: TauriResponse::Success,
91 + message: res.message,
92 + access_token: token,
93 + user: res.user,
94 }
95 }
96
@@ -164,13 +167,10 @@ pub async fn account_register(
167
168 #[tauri::command]
169 pub async fn account_profile(user_id: String) -> AccountProfileResponse {
167 - debug!("Getting profile for user_id {}", user_id);
170 + debug!("Getting profile for user_id {}", user_id);
171 // Get profile
172 let url = account_url_builder(PATH_ACCOUNT_PROFILE).replace("{userId}", &user_id);
170 - let response = Client::new()
171 - .get(&url)
172 - .send()
173 - .await;
173 + let response = Client::new().get(&url).send().await;
174
175 let response = match response {
176 Ok(response) => response,