mirror of
				https://gitlab.com/comunic/comunicapiv2
				synced 2025-11-04 03:24:04 +00:00 
			
		
		
		
	Can fetch basic information about a user
This commit is contained in:
		@@ -1,6 +1,7 @@
 | 
			
		||||
import { WelcomeController } from "./WelcomeController";
 | 
			
		||||
import { RequestHandler } from "../entities/RequestHandler";
 | 
			
		||||
import { AccountController } from "./AccountController";
 | 
			
		||||
import { UserController } from "./UserController";
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Controllers routes
 | 
			
		||||
@@ -34,4 +35,12 @@ export const Routes : Route[] = [
 | 
			
		||||
	
 | 
			
		||||
	{path: "/account/id", cb: AccountController.CurrentUserID},
 | 
			
		||||
	{path: "/user/getCurrentUserID", cb: AccountController.CurrentUserID}, // Legacy
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
	// User controller
 | 
			
		||||
	{path: "/user/getInfo", cb: UserController.GetSingle, needLogin: false},
 | 
			
		||||
	{path: "/user/getInfos", cb: UserController.GetSingle, needLogin: false}, // Legacy
 | 
			
		||||
 | 
			
		||||
	{path: "/user/getInfoMultiple", cb: UserController.GetMultiple, needLogin: false},
 | 
			
		||||
	{path: "/user/getInfosMultiple", cb: UserController.GetMultiple, needLogin: false}, // Legacy
 | 
			
		||||
]
 | 
			
		||||
							
								
								
									
										43
									
								
								src/controllers/UserController.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										43
									
								
								src/controllers/UserController.ts
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,43 @@
 | 
			
		||||
import { RequestHandler } from "../entities/RequestHandler";
 | 
			
		||||
import { UserHelper } from "../helpers/UserHelper";
 | 
			
		||||
import { User, UserPageStatus } from "../entities/User";
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * User information controller
 | 
			
		||||
 * 
 | 
			
		||||
 * @author Pierre HUBERT
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
export class UserController {
 | 
			
		||||
 | 
			
		||||
	/**
 | 
			
		||||
	 * Get information about a single user
 | 
			
		||||
	 */
 | 
			
		||||
	public static async GetSingle(handler : RequestHandler) {
 | 
			
		||||
		const userID = handler.postInt("userID");
 | 
			
		||||
		const user = await UserHelper.GetUserInfo(userID);
 | 
			
		||||
 | 
			
		||||
		if(!user)
 | 
			
		||||
			handler.error(404, "Could not get user data!");
 | 
			
		||||
		
 | 
			
		||||
		handler.send(UserController.UserToAPI(user));
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	/**
 | 
			
		||||
	 * Get information about multiple users
 | 
			
		||||
	 */
 | 
			
		||||
	public static async GetMultiple(handler : RequestHandler) {
 | 
			
		||||
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	private static UserToAPI(user : User) : any {
 | 
			
		||||
		return {
 | 
			
		||||
			"userID": user.id,
 | 
			
		||||
			"firstName": user.firstName,
 | 
			
		||||
			"lastName": user.lastName,
 | 
			
		||||
			"publicPage": user.pageStatus == UserPageStatus.PUBLIC,
 | 
			
		||||
			"openPage": user.pageStatus == UserPageStatus.OPEN,
 | 
			
		||||
			"virtualDirectory": user.virtualDirectory,
 | 
			
		||||
		};
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										39
									
								
								src/entities/User.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										39
									
								
								src/entities/User.ts
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,39 @@
 | 
			
		||||
/**
 | 
			
		||||
 * User information
 | 
			
		||||
 * 
 | 
			
		||||
 * @author Pierre HUBERT
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
export enum UserPageStatus {
 | 
			
		||||
	PRIVATE,
 | 
			
		||||
	PUBLIC,
 | 
			
		||||
	OPEN
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export interface UserBuilder {
 | 
			
		||||
	id: number,
 | 
			
		||||
	firstName: string,
 | 
			
		||||
	lastName: string,
 | 
			
		||||
	timeCreate: number,
 | 
			
		||||
	virtualDirectory: string,
 | 
			
		||||
	pageStatus: UserPageStatus,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export class User {
 | 
			
		||||
	id: number;
 | 
			
		||||
	firstName: string;
 | 
			
		||||
	lastName: string;
 | 
			
		||||
	timeCreate: number;
 | 
			
		||||
	virtualDirectory: string;
 | 
			
		||||
	pageStatus: UserPageStatus;
 | 
			
		||||
 | 
			
		||||
	public constructor(info : UserBuilder) {
 | 
			
		||||
		this.id = info.id;
 | 
			
		||||
		this.firstName = info.firstName;
 | 
			
		||||
		this.lastName = info.lastName;
 | 
			
		||||
		this.timeCreate = info.timeCreate;
 | 
			
		||||
		this.virtualDirectory = info.virtualDirectory;
 | 
			
		||||
		this.pageStatus = info.pageStatus;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										45
									
								
								src/helpers/UserHelper.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										45
									
								
								src/helpers/UserHelper.ts
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,45 @@
 | 
			
		||||
import { User, UserPageStatus } from "../entities/User";
 | 
			
		||||
import { DatabaseHelper } from "./DatabaseHelper";
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * User helper
 | 
			
		||||
 * 
 | 
			
		||||
 * @author Pierre HUBERT
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
const TABLE_NAME = "utilisateurs";
 | 
			
		||||
 | 
			
		||||
export class UserHelper {
 | 
			
		||||
 | 
			
		||||
	/**
 | 
			
		||||
	 * Get information a single user
 | 
			
		||||
	 * 
 | 
			
		||||
	 * @param id The ID of the user to get
 | 
			
		||||
	 * @returns Information about the user | null if not found
 | 
			
		||||
	 */
 | 
			
		||||
	public static async GetUserInfo(id: number) : Promise<User|null> {
 | 
			
		||||
		const result = await DatabaseHelper.QueryRow({
 | 
			
		||||
			table: TABLE_NAME,
 | 
			
		||||
			where: {
 | 
			
		||||
				ID: id
 | 
			
		||||
			}
 | 
			
		||||
		});
 | 
			
		||||
 | 
			
		||||
		if(!result)
 | 
			
		||||
			return null;
 | 
			
		||||
		
 | 
			
		||||
		return this.DbToUser(result);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
	private static DbToUser(row: any) : User {
 | 
			
		||||
		return new User({
 | 
			
		||||
			id: row.ID,
 | 
			
		||||
			firstName: row.prenom,
 | 
			
		||||
			lastName: row.nom,
 | 
			
		||||
			timeCreate: new Date(row.date_creation).getTime()/1000,
 | 
			
		||||
			virtualDirectory: row.sous_repertoire,
 | 
			
		||||
			pageStatus: row.pageouverte == 1 ? UserPageStatus.OPEN : (row.public == 1 ? UserPageStatus.PUBLIC : UserPageStatus.PRIVATE)
 | 
			
		||||
		});
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
		Reference in New Issue
	
	Block a user