-
Notifications
You must be signed in to change notification settings - Fork 13
Expand file tree
/
Copy pathpetstore_server.jl
More file actions
169 lines (140 loc) · 4.3 KB
/
petstore_server.jl
File metadata and controls
169 lines (140 loc) · 4.3 KB
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
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
module PetStoreV3Server
using HTTP
include("petstore/src/PetStoreServer.jl")
using .PetStoreServer
const server = Ref{Any}(nothing)
const pets = Vector{Pet}()
const orders = Vector{Order}()
const users = Vector{User}()
const PRESET_TEST_USER = "user1"
function add_pet(req::HTTP.Request, pet::Pet;)
push!(pets, pet)
return nothing
end
function delete_pet(req::HTTP.Request, pet_id::Int64; api_key=nothing,)
filter!(x->x.id != pet_id, pets)
return nothing
end
function find_pets_by_status(req::HTTP.Request, status::Vector{String};)
return filter(x->x.status == status, pets)
end
function find_pets_by_tags(req::HTTP.Request, tags::Vector{String};)
return filter(x->!isempty(intersect(Set(x.tags), Set(tags))), pets)
end
function get_pet_by_id(req::HTTP.Request, pet_id::Int64;)
pet = findfirst(x->x.id == pet_id, pets)
if pet === nothing
return HTTP.Response(404, "Pet not found")
else
return pets[pet]
end
end
function update_pet(req::HTTP.Request, pet::Pet;)
filter!(x->x.id != pet.id, pets)
push!(pets, pet)
return nothing
end
function update_pet_with_form(req::HTTP.Request, pet_id::Int64; name=nothing, status=nothing,)
for pet in pets
if pet.id == pet_id
if !isnothing(name)
pet.name = name
end
if !isnothing(status)
pet.status = status
end
end
end
return nothing
end
function upload_file(req::HTTP.Request, pet_id::Int64; additional_metadata=nothing, file=nothing,)
return ApiResponse(; code=1, type="pet", message="file uploaded", )
end
function delete_order(req::HTTP.Request, order_id::String;)
filter!(x->x.id != order_id, orders)
return nothing
end
function get_inventory(req::HTTP.Request;)
return Dict{String, Int64}(
"additionalProp1" => 0,
"additionalProp2" => 0,
"additionalProp3" => 0,
)
end
function get_order_by_id(req::HTTP.Request, order_id::Int64;)
order = findfirst(x->x.id == order_id, orders)
if order === nothing
return HTTP.Response(404, "Order not found")
else
return orders[order]
end
end
function place_order(req::HTTP.Request, order::Order;)
if isnothing(order.id)
max_OrderId = isempty(orders) ? 0 : maximum(x->x.id, orders)
order.id = max_OrderId + 1
end
push!(orders, order)
return order
end
function create_user(req::HTTP.Request, user::User;)
push!(users, user)
return nothing
end
function create_users_with_array_input(req::HTTP.Request, user::Vector{User};)
append!(users, user)
return nothing
end
function create_users_with_list_input(req::HTTP.Request, user::Vector{User};)
append!(users, user)
return nothing
end
function delete_user(req::HTTP.Request, username::String;)
filter!(x->x.username != username, users)
return nothing
end
function get_user_by_name(req::HTTP.Request, username::String;)
# user = findfirst(x->x.username == username, users)
# if user === nothing
# return HTTP.Response(404, "User not found")
# else
# return user
# end
if username == PRESET_TEST_USER
return User(; id=1, username=PRESET_TEST_USER, firstName="John", lastName="Doe", email="jondoe@test.com", phone="1234567890", userStatus=1, )
else
return HTTP.Response(404, "User not found")
end
end
function login_user(req::HTTP.Request, username::String, password::String;)
return "logged in user session: test"
end
function logout_user(req::HTTP.Request;)
return nothing
end
function update_user(req::HTTP.Request, username::String, user::User;)
filter!(x->x.username != username, users)
push!(users, user)
return nothing
end
function stop(::HTTP.Request)
HTTP.close(server[])
return HTTP.Response(200, "")
end
function ping(::HTTP.Request)
return HTTP.Response(200, "")
end
function run_server(port=8081)
try
router = HTTP.Router()
router = PetStoreServer.register(router, @__MODULE__; path_prefix="/v3")
HTTP.register!(router, "GET", "/stop", stop)
HTTP.register!(router, "GET", "/ping", ping)
server[] = HTTP.serve!(router, port)
wait(server[])
catch ex
@error("Server error", exception=(ex, catch_backtrace()))
end
end
end # module PetStoreV3Server
PetStoreV3Server.run_server()