-
Notifications
You must be signed in to change notification settings - Fork 0
/
TDA_user_20793038_SanhuezaVega.rkt
134 lines (109 loc) · 3.92 KB
/
TDA_user_20793038_SanhuezaVega.rkt
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
128
129
130
#lang racket
; ######################################## TDA USER ##########################################
; ######################################## REPRESENTACION ####################################
; Este TDA corresponde a un usuario.
; Dentro se guardara el nombre del usuario y un estado de actividad.
; ######################################## CONSTRUCTOR #######################################
; Descripcion: Funcion que genera un usuario.
; Dom: username (string) X user-status (boolean) X user-chat-history (list)
; Rec: user (list)
; Recursion: -
(define set-user (lambda (username user-status cb-code-link fl-code-link)
(list username user-status cb-code-link fl-code-link)
))
; ######################################## PERTENENCIA #######################################
; Descripcion: Funcion que verifica si el username de un usuario ya existe en una lista de usuarios.
; Dom: username (list) X users-list (list)
; Rec: boolean
; Recursion: -
(define username-exists? (lambda (username users-list)
(define aux (lambda (username users-list)
(filter
((lambda (username) (lambda (user) (if (string-ci=? username (get-username user)) #t #f)))
username) users-list
)
))
(if (null? (aux username users-list)) #f #t)
))
; Descripcion: Funcion que verifica si un usuario esta conectado.
; Dom: users-list
; Rec: boolean
; Recursion: -
(define someone-logged-in? (lambda (users-list)
(define aux (lambda (users-list)
(filter (lambda (user) (if (equal? #t (get-user-status user)) #t #f)) users-list)
))
(if (null? (aux users-list)) #f #t)
))
; ######################################## SELECTOR ##########################################
; Descripcion: Funcion que obtiene el nombre de usuario.
; Dom: user (list)
; Rec: username (string)
; Recursion: -
(define get-username (lambda (user)
(list-ref user 0)
))
; Descripcion: Funcion que obtiene el estado de actividad del usuario.
; Dom: user (list)
; Rec: boolean
; Recursion: -
(define get-user-status (lambda (user)
(list-ref user 1)
))
; Descripcion: Funcion que obtiene el codigo del chatbot donde esta ubicado el usuario.
; Dom: user (list)
; Rec: cb-code-link (int)
; Recursion: -
(define get-cb-code-link (lambda (user)
(list-ref user 2)
))
; Descripcion: Funcion que obtiene el codigo del flujo donde esta ubicado el usuario.
; Dom: user (list)
; Rec: fl-code-link (int)
; Recursion: -
(define get-fl-code-link (lambda (user)
(list-ref user 3)
))
; Descripcion: Funcion que obtiene el usuario logueado en el sistema.
; Dom: users-list (list)
; Rec: user (list)
; Recursion: -
(define get-user-logged (lambda (users-list)
(define aux (lambda (users-list)
(filter (lambda (user) (if (equal? #t (get-user-status user)) #t #f)) users-list)
))
(list-ref (aux users-list) 0)
))
; ######################################## MODIFICADOR #######################################
; Descripcion: Funcion que conecta a un usuario.
; Dom: username (string) X users-list (list)
; Rec: users-list (list)
; Recursion: -
(define login-user (lambda (username users-list)
(map ((lambda (username) (lambda (user)
(if (string=? username (get-username user))
(set-user username #t -1 -1)
user
)
)) username) users-list)
))
; Descripcion: Funcion que desconecta a un usuario.
; Dom: users-list (list)
; Rec: users-list (list)
; Recursion: -
(define logout (lambda (users-list)
(map (lambda (user) (set-user (get-username user) #f -1 -1)) users-list)
))
(define change-codelinks-in-user (lambda (users-list n-cb-code-link n-fl-code-link)
(map
(lambda (user)
(if (get-user-status user)
(set-user (get-username user) #t n-cb-code-link n-fl-code-link)
user
)
)
users-list
)
))
; ######################################## EXPORTACION DE FUNCION ############################
(provide (all-defined-out))