`;
diff --git a/hotel-management/src/pages/User/__tests__/__snapshots__/index.test.tsx.snap b/hotel-management/src/pages/User/__tests__/__snapshots__/index.test.tsx.snap
index 10bb701..99a82fa 100644
--- a/hotel-management/src/pages/User/__tests__/__snapshots__/index.test.tsx.snap
+++ b/hotel-management/src/pages/User/__tests__/__snapshots__/index.test.tsx.snap
@@ -2,19 +2,19 @@
exports[`User Should render correctly 1`] = `
List User
diff --git a/hotel-management/src/pages/User/styled.ts b/hotel-management/src/pages/User/styled.ts
index 82229a4..803f1ec 100644
--- a/hotel-management/src/pages/User/styled.ts
+++ b/hotel-management/src/pages/User/styled.ts
@@ -1,8 +1,5 @@
import styled from 'styled-components';
-// Components
-import Button from '../../commons/styles/Button';
-
const StyledUser = styled.main`
padding: 20px;
padding-bottom: 100px;
@@ -24,14 +21,4 @@ const StyledOperationTable = styled.div`
justify-content: flex-end;
`;
-const FormBtn = styled(Button)`
- width: 100%;
-
- &:disabled,
- &[disabled] {
- background-color: var(--disabled-btn-color);
- cursor: no-drop;
- }
-`;
-
-export { StyledUser, Title, StyledOperationTable, FormBtn };
+export { StyledUser, Title, StyledOperationTable };
diff --git a/hotel-management/src/services/__tests__/roomService.test.ts b/hotel-management/src/services/__tests__/roomService.test.ts
index fcd4cc8..56202ca 100644
--- a/hotel-management/src/services/__tests__/roomService.test.ts
+++ b/hotel-management/src/services/__tests__/roomService.test.ts
@@ -1,61 +1,59 @@
import { waitFor } from '@testing-library/react';
-import supabase from '@service/supabaseService';
// Services
import {
createRoom,
- deleteRoom,
+ setIsDeleteRoom,
getAllRooms,
updateRoom,
} from '@service/roomServices';
// Types
-import { IRoom } from '@type/rooms';
+import { IRoom } from '@type/room';
jest.mock('@service/supabaseService');
const mockGetAllRooms = jest.fn(getAllRooms);
const mockUpdateRoom = jest.fn(updateRoom);
const mockCreateRoom = jest.fn(createRoom);
-const mockDeleteRoom = jest.fn(deleteRoom);
+const mockIsDeleteRoom = jest.fn(setIsDeleteRoom);
const sampleData: IRoom = {
id: 999,
name: 'Room name test',
price: 9999,
status: true,
+ isDelete: true,
};
describe('Rooms service', () => {
test('Should fetch room correctly', async () => {
- mockGetAllRooms.mockResolvedValue([
- {
- id: 1,
- name: 'Nezumi',
- price: 2500,
- status: true,
- },
- {
- id: 2,
- name: 'Loi Phan',
- price: 8500,
- status: false,
- },
- ]);
- const result = await mockGetAllRooms('name', 'asc', '');
+ mockGetAllRooms.mockResolvedValue({
+ data: [
+ {
+ id: 1,
+ name: 'Nezumi',
+ price: 2500,
+ status: true,
+ isDelete: true,
+ },
+ {
+ id: 2,
+ name: 'Loi Phan',
+ price: 8500,
+ status: false,
+ isDelete: true,
+ },
+ ],
+ count: 2,
+ });
+ const result = await mockGetAllRooms({
+ sortBy: 'name',
+ orderBy: 'asc',
+ roomSearch: '',
+ page: 1,
+ });
- await waitFor(() => expect(result.length).toEqual(2));
- });
-
- test('Can not fetch data', async () => {
- jest.spyOn(supabase.from('rooms').select(), 'single').mockRejectedValue(() => {
- return {
- error: 'Error'
- }
- })
-
- await mockGetAllRooms('name', 'asc', '');
-
- expect(mockGetAllRooms).toThrow();
+ await waitFor(() => expect(result.data.length).toEqual(2));
});
test('Should create room correctly', async () => {
@@ -72,6 +70,7 @@ describe('Rooms service', () => {
name: 'Nezumi',
price: 2500,
status: true,
+ isDelete: true,
});
const result = await mockUpdateRoom(sampleData);
@@ -79,7 +78,9 @@ describe('Rooms service', () => {
});
test('Should delete room correctly', async () => {
- mockDeleteRoom.mockImplementation(() => Promise.resolve());
- await mockDeleteRoom(1);
+ mockIsDeleteRoom.mockResolvedValue(sampleData);
+ const result = await mockIsDeleteRoom(1);
+
+ await waitFor(() => expect(result).toBeTruthy());
});
});
diff --git a/hotel-management/src/services/__tests__/userService.test.ts b/hotel-management/src/services/__tests__/userService.test.ts
index 9bf2619..af30ea7 100644
--- a/hotel-management/src/services/__tests__/userService.test.ts
+++ b/hotel-management/src/services/__tests__/userService.test.ts
@@ -4,7 +4,7 @@ import { waitFor } from '@testing-library/react';
import { createUser, getAllUsers, updateUser } from '@service/userServices';
// Types
-import { IUser } from '@type/users';
+import { IUser } from '@type/user';
const mockGetAllUsers = jest.fn(getAllUsers);
const mockCreateUser = jest.fn(createUser);
@@ -15,27 +15,37 @@ const sampleData: IUser = {
name: 'User name test',
phone: '123456789',
isBooked: true,
+ isDelete: true,
};
describe('User services', () => {
test('Should fetch user data correctly', async () => {
- mockGetAllUsers.mockResolvedValue([
- {
- id: 1,
- name: 'Nezumi',
- phone: '0324422123',
- isBooked: true,
- },
- {
- id: 2,
- name: 'Loi Phan',
- phone: '0324422145',
- isBooked: false,
- },
- ]);
- const result = await mockGetAllUsers('name', 'asc', '');
+ mockGetAllUsers.mockResolvedValue({
+ data: [
+ {
+ id: 1,
+ name: 'Nezumi',
+ phone: '0324422123',
+ isBooked: true,
+ isDelete: true,
+ },
+ {
+ id: 2,
+ name: 'Loi Phan',
+ phone: '0324422145',
+ isBooked: false,
+ isDelete: true,
+ },
+ ], count: 2
+ });
+ const result = await mockGetAllUsers(({
+ sortBy: 'name',
+ orderBy: 'asc',
+ phoneSearch: '',
+ page: 1,
+ }));
- await waitFor(() => expect(result.length).toEqual(2));
+ await waitFor(() => expect(result.data.length).toEqual(2));
});
test('Should create user correctly', async () => {
diff --git a/hotel-management/src/services/authenticationService.ts b/hotel-management/src/services/authenticationService.ts
new file mode 100644
index 0000000..151730e
--- /dev/null
+++ b/hotel-management/src/services/authenticationService.ts
@@ -0,0 +1,68 @@
+import { ILogin } from '@type/common';
+import { UserAttributes } from '@supabase/supabase-js';
+
+// Services
+import supabase from './supabaseService';
+
+// Types
+import { IAccount } from '@type/account';
+
+const login = async ({ email, password }: ILogin) => {
+ const { data, error } = await supabase.auth.signInWithPassword({
+ email,
+ password,
+ });
+
+ if (error) {
+ throw new Error(error.message);
+ }
+
+ return data;
+};
+
+const getCurrentAccount = async () => {
+ const { data } = await supabase.auth.getSession();
+
+ if (!data.session) {
+ return null;
+ }
+
+ const { data: accountData, error } = await supabase.auth.getUser();
+
+ if (error) {
+ throw new Error(error.message);
+ }
+
+ return accountData.user;
+};
+
+const logout = async () => {
+ const { error } = await supabase.auth.signOut();
+
+ if (error) {
+ throw new Error(error.message);
+ }
+};
+
+const updateAccount = async ({ fullName, password }: IAccount) => {
+ let accountUpdate: UserAttributes | null = null;
+
+ if (password) {
+ accountUpdate = { password };
+ }
+
+ if (fullName) {
+ accountUpdate = { data: { fullName } };
+ }
+
+ const { data, error } = await supabase.auth.updateUser(accountUpdate!);
+
+ if (error) {
+ console.error(error.message);
+ throw new Error(error.message);
+ }
+
+ return data;
+};
+
+export { login, logout, getCurrentAccount, updateAccount };
diff --git a/hotel-management/src/services/bookingServices.ts b/hotel-management/src/services/bookingServices.ts
new file mode 100644
index 0000000..b8cac0e
--- /dev/null
+++ b/hotel-management/src/services/bookingServices.ts
@@ -0,0 +1,155 @@
+// Types
+import { IBooking, TBookingResponse } from '@type/booking';
+
+// Services
+import supabase from './supabaseService';
+
+// Constants
+import { DEFAULT_PAGE_SIZE } from '@constant/config';
+import {
+ BOOKINGS_TABLE,
+ ERROR_CHECKOUT,
+ ERROR_CREATE_BOOKING,
+ ERROR_DELETE_BOOKING,
+ ERROR_FETCHING_BOOKING,
+ ERROR_UPDATE_BOOKING,
+} from '@constant/messages';
+import { updateRoomStatus } from './roomServices';
+import { updateUserBookedStatus } from './userServices';
+
+interface ICheckOutBooking {
+ idBooking: number;
+ roomId: number;
+ userId: number;
+}
+
+interface IGetAllBookings {
+ userNameSearch: string;
+ page: number;
+}
+
+/**
+ * Get all bookings from database
+ * @returns Return all bookings in database
+ */
+const getAllBookings = async ({
+ userNameSearch,
+ page,
+}: IGetAllBookings): Promise<{
+ data: TBookingResponse[];
+ count: number | null;
+}> => {
+ const from = (page - 1) * DEFAULT_PAGE_SIZE;
+ const to = from + DEFAULT_PAGE_SIZE - 1;
+
+ const { data, error, count } = await supabase
+ .from(BOOKINGS_TABLE)
+ .select(
+ 'id, startDate, endDate, status, amount, rooms(id, name), users!inner(id, name)',
+ {
+ count: 'exact',
+ }
+ )
+ .ilike('users.name', `%${userNameSearch}%`)
+ .range(from, to);
+
+ if (error) {
+ console.error(error.message);
+ throw new Error(ERROR_FETCHING_BOOKING);
+ }
+
+ return { data, count };
+};
+
+/**
+ * Update booking into database
+ * @param booking Booking object need to be updated
+ */
+const updateBooking = async (booking: IBooking): Promise
=> {
+ const { data, error } = await supabase
+ .from(BOOKINGS_TABLE)
+ .update(booking)
+ .eq('id', booking.id)
+ .select()
+ .single();
+
+ if (error) {
+ console.error(error.message);
+ throw new Error(ERROR_UPDATE_BOOKING);
+ }
+
+ return data;
+};
+
+/**
+ * Add booking to database
+ * @param booking The booking object need to be add
+ */
+const createBooking = async (booking: IBooking): Promise => {
+ const { data, error: createBookingError } = await supabase
+ .from(BOOKINGS_TABLE)
+ .insert(booking)
+ .select()
+ .single();
+
+ if (createBookingError) {
+ console.error(createBookingError.message);
+ throw new Error(ERROR_CREATE_BOOKING);
+ }
+
+ return data;
+};
+
+/**
+ * Delete booking in database
+ * @param idRoom The id of booking need to delete
+ */
+const deleteBooking = async (idBooking: number) => {
+ const { error } = await supabase
+ .from(BOOKINGS_TABLE)
+ .delete()
+ .eq('id', idBooking);
+
+ if (error) {
+ console.error(error.message);
+ throw new Error(ERROR_DELETE_BOOKING);
+ }
+};
+
+/**
+ * Check out booking services
+ * @param param0 The ICheckOutBooking object
+ * @returns The data of booking after insert to database
+ */
+const checkOutBooking = async ({
+ idBooking,
+ roomId,
+ userId,
+}: ICheckOutBooking) => {
+ // Update status booking
+ const { data, error } = await supabase
+ .from(BOOKINGS_TABLE)
+ .update({ status: false })
+ .eq('id', idBooking)
+ .select()
+ .single();
+
+ if (error) {
+ console.error(error.message);
+ throw new Error(ERROR_CHECKOUT);
+ }
+
+ // Update status room, user
+ await updateRoomStatus(roomId, false);
+ await updateUserBookedStatus(userId, false);
+
+ return data;
+};
+
+export {
+ createBooking,
+ getAllBookings,
+ updateBooking,
+ deleteBooking,
+ checkOutBooking,
+};
diff --git a/hotel-management/src/services/roomServices.ts b/hotel-management/src/services/roomServices.ts
index ed0a843..ed78b85 100644
--- a/hotel-management/src/services/roomServices.ts
+++ b/hotel-management/src/services/roomServices.ts
@@ -1,38 +1,58 @@
// Types
-import { IRoom } from '@type/rooms';
-import { IDataState } from '@type/common';
+import { IRoom } from '@type/room';
// Services
import supabase from './supabaseService';
// Constants
-const ROOMS_TABLE = 'rooms';
-const ERROR_FETCHING = "Can't fetch room data!";
-const ERROR_UPDATE_ROOM = "Can't update room!";
-const ERROR_CREATE_ROOM = "Can't create room!";
-const ERROR_DELETE_ROOM = "Can't delete room!";
+import { DEFAULT_PAGE_SIZE } from '@constant/config';
+import {
+ ERROR_CREATE_ROOM,
+ ERROR_DELETE_ROOM,
+ ERROR_FETCHING_ROOM,
+ ERROR_UPDATE_ROOM,
+ ROOMS_TABLE,
+} from '@constant/messages';
+
+interface IGetAllRooms {
+ sortBy: string;
+ orderBy: string;
+ roomSearch: string;
+ page: number;
+}
/**
* Get all rooms from database
* @returns Return all rooms in database
*/
-const getAllRooms = async (
- sortBy: string,
- orderBy: string,
- roomName: string
-): Promise => {
- const { data, error } = await supabase
+const getAllRooms = async ({
+ sortBy,
+ orderBy,
+ roomSearch,
+ page,
+}: IGetAllRooms): Promise<{ data: IRoom[]; count: number | null }> => {
+ const from = (page - 1) * DEFAULT_PAGE_SIZE;
+ const to = from + DEFAULT_PAGE_SIZE - 1;
+
+ let query = supabase
.from(ROOMS_TABLE)
- .select('*')
+ .select('*', { count: 'exact' })
.order(sortBy, { ascending: orderBy === 'asc' })
- .ilike('name', `%${roomName}%`);
+ .like('name', `%${roomSearch}%`)
+ .eq('isDelete', false);
+
+ if (page) {
+ query = query.range(from, to);
+ }
+
+ const { data, error, count } = await query;
if (error) {
console.error(error.message);
- throw new Error(ERROR_FETCHING);
+ throw new Error(ERROR_FETCHING_ROOM);
}
- return data;
+ return { data, count };
};
/**
@@ -75,30 +95,67 @@ const createRoom = async (room: IRoom): Promise => {
};
/**
- * Delete room in database
- * @param idRoom The id of room need to delete
+ * Set room is delete status
+ * @param idRoom The id of room need to set
*/
-const deleteRoom = async (idRoom: number) => {
- const { error } = await supabase.from(ROOMS_TABLE).delete().eq('id', idRoom);
+const setIsDeleteRoom = async (idRoom: number) => {
+ const { data, error } = await supabase
+ .from(ROOMS_TABLE)
+ .update({ isDelete: true })
+ .eq('id', idRoom)
+ .select()
+ .single();
if (error) {
console.error(error.message);
throw new Error(ERROR_DELETE_ROOM);
}
+
+ return data;
};
-const getRoomsAvailable = async (): Promise => {
+/**
+ * Get room by id in database
+ * @param idRoom The id room need to be get
+ * @returns The data of room
+ */
+const getRoomById = async (idRoom: string): Promise => {
const { data, error } = await supabase
.from(ROOMS_TABLE)
- .select('id, name')
- .eq('status', false);
+ .select('*')
+ .eq('id', idRoom)
+ .single();
if (error) {
console.error(error.message);
- throw new Error(ERROR_FETCHING);
+ throw new Error(ERROR_FETCHING_ROOM);
}
return data;
};
-export { getAllRooms, updateRoom, createRoom, deleteRoom, getRoomsAvailable };
+/**
+ * Update status of room
+ * @param id The id of room need to be change status
+ * @param status The status of room
+ */
+const updateRoomStatus = async (id: number, status: boolean): Promise => {
+ const { error } = await supabase
+ .from(ROOMS_TABLE)
+ .update({ status })
+ .eq('id', id);
+
+ if (error) {
+ console.error(error.message);
+ throw new Error(ERROR_UPDATE_ROOM);
+ }
+};
+
+export {
+ getAllRooms,
+ updateRoom,
+ createRoom,
+ setIsDeleteRoom,
+ getRoomById,
+ updateRoomStatus,
+};
diff --git a/hotel-management/src/services/userServices.ts b/hotel-management/src/services/userServices.ts
index 62d2fc9..1af1d12 100644
--- a/hotel-management/src/services/userServices.ts
+++ b/hotel-management/src/services/userServices.ts
@@ -1,14 +1,17 @@
// Types
-import { IUser } from '@type/users';
-import { IDataState } from '@type/common';
+import { IUser } from '@type/user';
// Services
import supabase from './supabaseService';
-
-const USERS_TABLE = 'users';
-const ERROR_FETCHING = "Users can't be loaded!";
-const ERROR_CREATE_USER = "Can't create user!";
-const ERROR_UPDATE_USER = "Can't update user!";
+import { IDataState } from '@type/common';
+import { DEFAULT_PAGE_SIZE } from '@constant/config';
+import {
+ ERROR_CREATE_USER,
+ ERROR_DELETE_USER,
+ ERROR_FETCHING_USER,
+ ERROR_UPDATE_USER,
+ USERS_TABLE,
+} from '@constant/messages';
/**
* Create user to the database
@@ -21,6 +24,8 @@ const createUser = async (user: IUser): Promise => {
.select()
.single();
+ console.log('Create');
+
if (error) {
console.error(error.message);
throw new Error(ERROR_CREATE_USER);
@@ -49,6 +54,33 @@ const updateUser = async (user: IUser): Promise => {
return data;
};
+/**
+ * Set user in delete status
+ * @param idUser The id of user need to delete
+ */
+const setIsDeleteUser = async (idUser: number) => {
+ const { data, error } = await supabase
+ .from(USERS_TABLE)
+ .update({isDelete: true})
+ .eq('id', idUser)
+ .select()
+ .single();
+
+ if (error) {
+ console.error(error.message);
+ throw new Error(ERROR_DELETE_USER);
+ }
+
+ return data;
+};
+
+interface IGetAllUsers {
+ sortBy: string;
+ orderBy: string;
+ phoneSearch: string;
+ page: number;
+}
+
/**
* Return data of users from database
* @param sortBy Sort by column
@@ -56,37 +88,71 @@ const updateUser = async (user: IUser): Promise => {
* @param phoneSearch The phone need to be search
* @returns The data of users from database
*/
-const getAllUsers = async (
- sortBy: string,
- orderBy: string,
- phoneSearch: string
-): Promise => {
- const { data, error } = await supabase
+const getAllUsers = async ({
+ sortBy,
+ orderBy,
+ phoneSearch,
+ page,
+}: IGetAllUsers): Promise<{ data: IUser[]; count: number | null }> => {
+ const from = (page - 1) * DEFAULT_PAGE_SIZE;
+ const to = from + DEFAULT_PAGE_SIZE - 1;
+
+ let query = supabase
.from(USERS_TABLE)
- .select('*')
+ .select('*', { count: 'exact' })
.order(sortBy, { ascending: orderBy === 'asc' })
- .ilike('phone', `%${phoneSearch}%`);
+ .like('phone', `%${phoneSearch}%`)
+ .eq('isDelete', false);
+
+ if (page) {
+ query = query.range(from, to);
+ }
+
+ const { data, error, count } = await query;
if (error) {
console.error(error.message);
- throw new Error(ERROR_FETCHING);
+ throw new Error(ERROR_FETCHING_USER);
}
- return data;
+ return { data, count };
};
const getUserNotBooked = async (): Promise => {
const { data, error } = await supabase
.from(USERS_TABLE)
- .select('id, name')
- .eq('isBooked', false);
+ .select('id, name, isBooked');
if (error) {
console.error(error.message);
- throw new Error(ERROR_FETCHING);
+ throw new Error(ERROR_FETCHING_USER);
}
return data;
};
-export { updateUser, createUser, getAllUsers, getUserNotBooked };
+const updateUserBookedStatus = async (
+ id: number,
+ isBooked: boolean
+): Promise => {
+ const { error, status } = await supabase
+ .from(USERS_TABLE)
+ .update({ isBooked })
+ .eq('id', id);
+
+ if (error) {
+ console.error(error.message);
+ throw new Error(ERROR_UPDATE_USER);
+ }
+
+ return status;
+};
+
+export {
+ updateUser,
+ createUser,
+ getAllUsers,
+ setIsDeleteUser,
+ getUserNotBooked,
+ updateUserBookedStatus,
+};
diff --git a/hotel-management/src/styles/abstracts/variables.css b/hotel-management/src/styles/abstracts/variables.css
index 8e38691..8ced783 100644
--- a/hotel-management/src/styles/abstracts/variables.css
+++ b/hotel-management/src/styles/abstracts/variables.css
@@ -3,6 +3,7 @@
--header-table-color: #ebebeb;
--border-color: #8c8c8c;
+ --footer-table-color: #ebebeb;
--secondary-btn-color: #d1d1d1;
--disabled-btn-color: #7f82a6;
@@ -22,6 +23,8 @@
--form-color: #fff;
+ --background-login: #f8f8f8;
+
--shadow-sm: 0px 10px 20px rgba(0, 0, 0, 0.2);
--fs-md: 30px;
diff --git a/hotel-management/src/types/account.ts b/hotel-management/src/types/account.ts
new file mode 100644
index 0000000..1413d0c
--- /dev/null
+++ b/hotel-management/src/types/account.ts
@@ -0,0 +1,6 @@
+interface IAccount {
+ fullName?: string;
+ password?: string;
+}
+
+export type { IAccount };
diff --git a/hotel-management/src/types/booking.ts b/hotel-management/src/types/booking.ts
new file mode 100644
index 0000000..460b999
--- /dev/null
+++ b/hotel-management/src/types/booking.ts
@@ -0,0 +1,27 @@
+interface IBooking {
+ id: number;
+ startDate: string;
+ endDate: string;
+ status: boolean;
+ amount: number;
+ roomId: number;
+ userId: number;
+}
+
+interface TBookingResponse {
+ id: number;
+ startDate: string;
+ endDate: string;
+ status: boolean;
+ amount: number;
+ rooms: {
+ id: number
+ name: string;
+ } | null;
+ users: {
+ id: number;
+ name: string;
+ } | null;
+}
+
+export type { IBooking, TBookingResponse };
diff --git a/hotel-management/src/types/common.ts b/hotel-management/src/types/common.ts
index b98d8b5..08e954e 100644
--- a/hotel-management/src/types/common.ts
+++ b/hotel-management/src/types/common.ts
@@ -3,6 +3,15 @@ type Nullable = T | null;
interface IDataState {
id: number;
name?: string;
+ status?: boolean;
+ isBooked?: boolean;
}
-export type { Nullable, IDataState };
+interface ILogin {
+ email: string;
+ password: string;
+}
+
+type TDirection = 'vertical' | 'horizontal';
+
+export type { Nullable, IDataState, TDirection, ILogin };
diff --git a/hotel-management/src/types/rooms.ts b/hotel-management/src/types/room.ts
similarity index 83%
rename from hotel-management/src/types/rooms.ts
rename to hotel-management/src/types/room.ts
index 63234af..f356993 100644
--- a/hotel-management/src/types/rooms.ts
+++ b/hotel-management/src/types/room.ts
@@ -3,6 +3,7 @@ interface IRoom {
name: string;
price: number;
status: boolean;
+ isDelete: boolean;
}
export type { IRoom };
diff --git a/hotel-management/src/types/supabase.ts b/hotel-management/src/types/supabase.ts
index f19cbb3..ed1784f 100644
--- a/hotel-management/src/types/supabase.ts
+++ b/hotel-management/src/types/supabase.ts
@@ -25,7 +25,7 @@ export interface Database {
id?: number
roomId: number
startDate: string
- status: boolean
+ status?: boolean
userId: number
}
Update: {
@@ -57,18 +57,21 @@ export interface Database {
rooms: {
Row: {
id: number
+ isDelete: boolean
name: string
price: number
status: boolean
}
Insert: {
id?: number
+ isDelete?: boolean
name: string
price: number
status?: boolean
}
Update: {
id?: number
+ isDelete?: boolean
name?: string
price?: number
status?: boolean
@@ -79,18 +82,21 @@ export interface Database {
Row: {
id: number
isBooked: boolean
+ isDelete: boolean
name: string
phone: string
}
Insert: {
id?: number
isBooked?: boolean
+ isDelete?: boolean
name: string
phone: string
}
Update: {
id?: number
isBooked?: boolean
+ isDelete?: boolean
name?: string
phone?: string
}
@@ -111,3 +117,83 @@ export interface Database {
}
}
}
+
+export type Tables<
+ PublicTableNameOrOptions extends
+ | keyof (Database["public"]["Tables"] & Database["public"]["Views"])
+ | { schema: keyof Database },
+ TableName extends PublicTableNameOrOptions extends { schema: keyof Database }
+ ? keyof (Database[PublicTableNameOrOptions["schema"]]["Tables"] &
+ Database[PublicTableNameOrOptions["schema"]]["Views"])
+ : never = never
+> = PublicTableNameOrOptions extends { schema: keyof Database }
+ ? (Database[PublicTableNameOrOptions["schema"]]["Tables"] &
+ Database[PublicTableNameOrOptions["schema"]]["Views"])[TableName] extends {
+ Row: infer R
+ }
+ ? R
+ : never
+ : PublicTableNameOrOptions extends keyof (Database["public"]["Tables"] &
+ Database["public"]["Views"])
+ ? (Database["public"]["Tables"] &
+ Database["public"]["Views"])[PublicTableNameOrOptions] extends {
+ Row: infer R
+ }
+ ? R
+ : never
+ : never
+
+export type TablesInsert<
+ PublicTableNameOrOptions extends
+ | keyof Database["public"]["Tables"]
+ | { schema: keyof Database },
+ TableName extends PublicTableNameOrOptions extends { schema: keyof Database }
+ ? keyof Database[PublicTableNameOrOptions["schema"]]["Tables"]
+ : never = never
+> = PublicTableNameOrOptions extends { schema: keyof Database }
+ ? Database[PublicTableNameOrOptions["schema"]]["Tables"][TableName] extends {
+ Insert: infer I
+ }
+ ? I
+ : never
+ : PublicTableNameOrOptions extends keyof Database["public"]["Tables"]
+ ? Database["public"]["Tables"][PublicTableNameOrOptions] extends {
+ Insert: infer I
+ }
+ ? I
+ : never
+ : never
+
+export type TablesUpdate<
+ PublicTableNameOrOptions extends
+ | keyof Database["public"]["Tables"]
+ | { schema: keyof Database },
+ TableName extends PublicTableNameOrOptions extends { schema: keyof Database }
+ ? keyof Database[PublicTableNameOrOptions["schema"]]["Tables"]
+ : never = never
+> = PublicTableNameOrOptions extends { schema: keyof Database }
+ ? Database[PublicTableNameOrOptions["schema"]]["Tables"][TableName] extends {
+ Update: infer U
+ }
+ ? U
+ : never
+ : PublicTableNameOrOptions extends keyof Database["public"]["Tables"]
+ ? Database["public"]["Tables"][PublicTableNameOrOptions] extends {
+ Update: infer U
+ }
+ ? U
+ : never
+ : never
+
+export type Enums<
+ PublicEnumNameOrOptions extends
+ | keyof Database["public"]["Enums"]
+ | { schema: keyof Database },
+ EnumName extends PublicEnumNameOrOptions extends { schema: keyof Database }
+ ? keyof Database[PublicEnumNameOrOptions["schema"]]["Enums"]
+ : never = never
+> = PublicEnumNameOrOptions extends { schema: keyof Database }
+ ? Database[PublicEnumNameOrOptions["schema"]]["Enums"][EnumName]
+ : PublicEnumNameOrOptions extends keyof Database["public"]["Enums"]
+ ? Database["public"]["Enums"][PublicEnumNameOrOptions]
+ : never
diff --git a/hotel-management/src/types/users.ts b/hotel-management/src/types/user.ts
similarity index 84%
rename from hotel-management/src/types/users.ts
rename to hotel-management/src/types/user.ts
index 0f9517b..a64f2c7 100644
--- a/hotel-management/src/types/users.ts
+++ b/hotel-management/src/types/user.ts
@@ -3,6 +3,7 @@ interface IUser {
name: string;
phone: string;
isBooked: boolean;
+ isDelete: boolean;
}
export type { IUser };
diff --git a/hotel-management/tsconfig.json b/hotel-management/tsconfig.json
index ba79ba5..284f24e 100644
--- a/hotel-management/tsconfig.json
+++ b/hotel-management/tsconfig.json
@@ -32,7 +32,8 @@
"@component/*": ["./src/components/*"],
"@commonStyle/*": ["./src/commons/styles/*"],
"@type/*": ["./src/types/*"],
- "@page/*": ["./src/pages/*"]
+ "@page/*": ["./src/pages/*"],
+ "@assets/*": ["./src/assets/*"],
}
},
"include": ["src", "test"],