Merge remote-tracking branch 'origin/dev' into BumBranch

This commit is contained in:
al8763be 2024-03-20 20:55:53 +01:00
commit 69d07624ce
3 changed files with 83 additions and 23 deletions

View file

@ -7,52 +7,102 @@ import {
WeeklyReport, WeeklyReport,
} from "../Types/goTypes"; } from "../Types/goTypes";
// This type of pattern should be hard to misuse /**
* Response object returned by API methods.
*/
export interface APIResponse<T> { export interface APIResponse<T> {
/** Indicates whether the API call was successful */
success: boolean; success: boolean;
/** Optional message providing additional information or error description */
message?: string; message?: string;
/** Optional data returned by the API method */
data?: T; data?: T;
} }
// Note that all protected routes also require a token /**
// Defines all the methods that an instance of the API must implement * Interface defining methods that an instance of the API must implement.
*/
interface API { interface API {
/** Register a new user */ /**
* Register a new user
* @param {NewUser} user The user object to be registered
* @returns {Promise<APIResponse<User>>} A promise containing the API response with the user data.
*/
registerUser(user: NewUser): Promise<APIResponse<User>>; registerUser(user: NewUser): Promise<APIResponse<User>>;
/** Remove a user */
/**
* Removes a user.
* @param {string} username The username of the user to be removed.
* @param {string} token The authentication token.
* @returns {Promise<APIResponse<User>>} A promise containing the API response with the removed user data.
*/
removeUser(username: string, token: string): Promise<APIResponse<User>>; removeUser(username: string, token: string): Promise<APIResponse<User>>;
/** Check if user is project manager */
/**
* Check if user is project manager.
* @param {string} username The username of the user.
* @param {string} projectName The name of the project.
* @param {string} token The authentication token.
* @returns {Promise<APIResponse<boolean>>} A promise containing the API response indicating if the user is a project manager.
*/
checkIfProjectManager( checkIfProjectManager(
username: string, username: string,
projectName: string, projectName: string,
token: string, token: string,
): Promise<APIResponse<boolean>>; ): Promise<APIResponse<boolean>>;
/** Login */
/** Logs in a user with the provided credentials.
* @param {NewUser} NewUser The user object containing username and password.
* @returns {Promise<APIResponse<string>>} A promise resolving to an API response with a token.
*/
login(NewUser: NewUser): Promise<APIResponse<string>>; login(NewUser: NewUser): Promise<APIResponse<string>>;
/** Renew the token */
/**
* Renew the token
* @param {string} token The current authentication token.
* @returns {Promise<APIResponse<string>>} A promise resolving to an API response with a renewed token.
*/
renewToken(token: string): Promise<APIResponse<string>>; renewToken(token: string): Promise<APIResponse<string>>;
/** Promote user to admin */ /** Promote user to admin */
/** Create a project */
/** Creates a new project.
* @param {NewProject} project The project object containing name and description.
* @param {string} token The authentication token.
* @returns {Promise<APIResponse<Project>>} A promise resolving to an API response with the created project.
*/
createProject( createProject(
project: NewProject, project: NewProject,
token: string, token: string,
): Promise<APIResponse<Project>>; ): Promise<APIResponse<Project>>;
/** Submit a weekly report */
/** Submits a weekly report
* @param {NewWeeklyReport} weeklyReport The weekly report object.
* @param {string} token The authentication token.
* @returns {Promise<APIResponse<NewWeeklyReport>>} A promise resolving to an API response with the submitted report.
*/
submitWeeklyReport( submitWeeklyReport(
project: NewWeeklyReport, weeklyReport: NewWeeklyReport,
token: string, token: string,
): Promise<APIResponse<NewWeeklyReport>>; ): Promise<APIResponse<NewWeeklyReport>>;
/**Gets a weekly report*/
/** Gets a weekly report for a specific user, project and week
* @param {string} username The username of the user.
* @param {string} projectName The name of the project.
* @param {string} week The week number.
* @param {string} token The authentication token.
* @returns {Promise<APIResponse<WeeklyReport>>} A promise resolving to an API response with the retrieved report.
*/
getWeeklyReport( getWeeklyReport(
username: string, username: string,
projectName: string, projectName: string,
week: string, week: string,
token: string, token: string,
): Promise<APIResponse<WeeklyReport>>; ): Promise<APIResponse<WeeklyReport>>;
/** /**
* Returns all the weekly reports for a user in a particular project * Returns all the weekly reports for a user in a particular project
* The username is derived from the token * The username is derived from the token
*
* @param {string} projectName The name of the project * @param {string} projectName The name of the project
* @param {string} token The token of the user * @param {string} token The token of the user
* @returns {APIResponse<WeeklyReport[]>} A list of weekly reports * @returns {APIResponse<WeeklyReport[]>} A list of weekly reports
@ -61,15 +111,27 @@ interface API {
projectName: string, projectName: string,
token: string, token: string,
): Promise<APIResponse<WeeklyReport[]>>; ): Promise<APIResponse<WeeklyReport[]>>;
/** Gets all the projects of a user*/
/** Gets all the projects of a user
* @param {string} token - The authentication token.
* @returns {Promise<APIResponse<Project[]>>} A promise containing the API response with the user's projects.
*/
getUserProjects(token: string): Promise<APIResponse<Project[]>>; getUserProjects(token: string): Promise<APIResponse<Project[]>>;
/** Gets a project from id*/
/** Gets a project by its id.
* @param {number} id The id of the project to retrieve.
* @returns {Promise<APIResponse<Project>>} A promise resolving to an API response containing the project data.
*/
getProject(id: number): Promise<APIResponse<Project>>; getProject(id: number): Promise<APIResponse<Project>>;
/** Gets a project from id*/
/** Gets a list of all users.
* @param {string} token The authentication token of the requesting user.
* @returns {Promise<APIResponse<string[]>>} A promise resolving to an API response containing the list of users.
*/
getAllUsers(token: string): Promise<APIResponse<string[]>>; getAllUsers(token: string): Promise<APIResponse<string[]>>;
} }
// Export an instance of the API /** An instance of the API */
export const api: API = { export const api: API = {
async registerUser(user: NewUser): Promise<APIResponse<User>> { async registerUser(user: NewUser): Promise<APIResponse<User>> {
try { try {
@ -336,7 +398,6 @@ export const api: API = {
} }
}, },
// Gets a projet by id, currently untested since we have no javascript-based tests
async getProject(id: number): Promise<APIResponse<Project>> { async getProject(id: number): Promise<APIResponse<Project>> {
try { try {
const response = await fetch(`/api/project/${id}`, { const response = await fetch(`/api/project/${id}`, {
@ -362,7 +423,6 @@ export const api: API = {
} }
}, },
// Gets all users
async getAllUsers(token: string): Promise<APIResponse<string[]>> { async getAllUsers(token: string): Promise<APIResponse<string[]>> {
try { try {
const response = await fetch("/api/users/all", { const response = await fetch("/api/users/all", {

View file

@ -7,7 +7,7 @@ import Button from "./Button";
/** /**
* Tries to add a project to the system * Tries to add a project to the system
* @param props - Project name and description * @param {Object} props - Project name and description
* @returns {boolean} True if created, false if not * @returns {boolean} True if created, false if not
*/ */
function CreateProject(props: { name: string; description: string }): boolean { function CreateProject(props: { name: string; description: string }): boolean {
@ -34,8 +34,8 @@ function CreateProject(props: { name: string; description: string }): boolean {
} }
/** /**
* Tries to add a project to the system * Provides UI for adding a project to the system.
* @returns {JSX.Element} UI for project adding * @returns {JSX.Element} - Returns the component UI for adding a project
*/ */
function AddProject(): JSX.Element { function AddProject(): JSX.Element {
const [name, setName] = useState(""); const [name, setName] = useState("");

View file

@ -7,7 +7,7 @@ import { api } from "../API/API";
/** /**
* Renders a component that displays all the time reports for a specific project. * Renders a component that displays all the time reports for a specific project.
* @returns JSX.Element representing the component. * @returns {JSX.Element} representing the component.
*/ */
function AllTimeReportsInProject(): JSX.Element { function AllTimeReportsInProject(): JSX.Element {
const { projectName } = useParams(); const { projectName } = useParams();