-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathtda_user_20793038_SanhuezaVega.pl
127 lines (102 loc) · 4.71 KB
/
tda_user_20793038_SanhuezaVega.pl
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
:- module(tda_user_20793038_SanhuezaVega, [setUser/5, someoneLoggedIn/1, getUsername/2, getUserCBCodelink/2, getUserFCodelink/2, getUserLogged/2, login/4, logout/3, updateLoggedUser/5]).
:- use_module(tda_tools_20793038_SanhuezaVega).
% ######################################## TDA USER ##########################################
% ######################################## REPRESENTACION ####################################
% Este TDA corresponde a un usuario.
% Dentro se guardara el nombre del usuario y un estado de actividad.
% ######################################## CONSTRUCTOR #######################################
% Descripcion: Construye un usuario.
% Dom: Username (string) X Status (int) X CBCodelink (int) X FCodelink (int)
% Rec: User (list)
% Metodo: -
setUser(Username, Status, CBCodelink, FCodelink, User):-
User = [Username, Status, CBCodelink, FCodelink].
% ######################################## PERTENENCIA #######################################
% Descripcion: Verifica si ya existe un usuario logueado en una lista de usuarios.
% Dom: UserList (list)
% Rec: -
% Metodo: Recursion
someoneLoggedIn([First | _]):-
getUserStatus(First, UserStatus),
UserStatus == 1, !.
someoneLoggedIn([_ | Rest]):-
someoneLoggedIn(Rest).
% ######################################## SELECTOR ##########################################
% Descripcion: Obtiene el nombre de un usuario.
% Dom: User (list)
% Rec: Username (string)
% Metodo: -
getUsername(User, Username):-
setUser(Username, _, _, _, User).
% Descripcion: Obtiene el estado de un usuario.
% Dom: User (list)
% Rec: UserStatus (int)
% Metodo: -
getUserStatus(User, UserStatus):-
setUser(_, UserStatus, _, _, User).
% Descripcion: Obtiene el Chatbot Codelink en el que esta un usuario.
% Dom: User (list)
% Rec: UserCBCodelink (int)
% Metodo: -
getUserCBCodelink(User, UserCBCodelink):-
setUser(_, _, UserCBCodelink, _, User).
% Descripcion: Obtiene el Flow Codelink en el que esta un usuario.
% Dom: User (list)
% Rec: FlowCodelink (int)
% Metodo: -
getUserFCodelink(User, UserFCodelink):-
setUser(_, _, _, UserFCodelink, User).
% Descripcion: Obtiene el usuario logueado en una lista de usuarios.
% Dom: Userlist (list)
% Rec: UserLogged (list)
% Metodo: Recursion
getUserLogged([First | _], UserLogged):-
getUserStatus(First, UserStatus),
UserStatus == 1,
UserLogged = First, !.
getUserLogged([_ | Rest], UserLogged):-
getUserLogged(Rest, UserLogged).
% ######################################## MODIFICADOR #######################################
% Descripcion: Loguea a un usuario en una lista de usuarios.
% Dom: Username (string) X Userlist (list) X UpdatedUserList (list)
% Rec: FinalUserList (list)
% Metodo: Recursion
login(_, [], UpdatedUserList, FinalUserList):-
FinalUserList = UpdatedUserList, !.
login(Username, [First | Rest], UpdatedUserListA, FinalUserList):-
getUsername(First, SelectedUsername),
SelectedUsername == Username,
setUser(Username, 1, -1, -1, UpdatedUser),
append(UpdatedUserListA, [UpdatedUser], UpdatedUserListB),
login(Username, Rest, UpdatedUserListB, FinalUserList), !.
login(Username, [First | Rest], UpdatedUserListA, FinalUserList):-
append(UpdatedUserListA, [First], UpdatedUserListB),
login(Username, Rest, UpdatedUserListB, FinalUserList).
% Descripcion: Desloguea a un usuario en una lista de usuarios.
% Dom: Userlist (list) X UpdatedUserList (list)
% Rec: FinalUserlist (list)
% Metodo: Recursion
logout([], UpdatedUserList, FinalUserList):-
FinalUserList = UpdatedUserList, !.
logout([First | Rest], UpdatedUserListA, FinalUserList):-
getUsername(First, SelectedUsername),
setUser(SelectedUsername, 0, -1, -1, UpdatedUser),
append(UpdatedUserListA, [UpdatedUser], UpdatedUserListB),
logout(Rest, UpdatedUserListB, FinalUserList).
% Descripcion: Actualiza el cb y f codelink del usuario logueado.
% Dom: NCBCodelink (int) X NFColdelink (int) X Userlist (list) X
% UpdatedUserList (list)
% Rec: NewUserList (list)
% Metodo: Recursion
updateLoggedUser(_, _, [], UpdatedUserList, FinalUserList):-
FinalUserList = UpdatedUserList, !.
updateLoggedUser(NCBCodelink, NFColdelink, [First | Rest], UpdatedUserListA, FinalUserList):-
getUserStatus(First, UserStatus),
UserStatus == 1,
getUsername(First, Username),
setUser(Username, 1, NCBCodelink, NFColdelink, UpdatedUser),
append(UpdatedUserListA, [UpdatedUser], UpdatedUserListB),
updateLoggedUser(NCBCodelink, NFColdelink, Rest, UpdatedUserListB, FinalUserList), !.
updateLoggedUser(NCBCodelink, NFColdelink, [First | Rest], UpdatedUserListA, FinalUserList):-
append(UpdatedUserListA, [First], UpdatedUserListB),
updateLoggedUser(NCBCodelink, NFColdelink, Rest, UpdatedUserListB, FinalUserList).