-
Notifications
You must be signed in to change notification settings - Fork 10
/
Copy pathpetstore_server.jl
170 lines (141 loc) · 4.35 KB
/
petstore_server.jl
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
170
module PetStoreV2Server
using HTTP
using JSON
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::Int64;)
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 JSON.json(Dict("message"=>"logged in user session: test", "code"=>200))
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=8080)
try
router = HTTP.Router()
router = PetStoreServer.register(router, @__MODULE__; path_prefix="/v2")
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 PetStoreV2Server
PetStoreV2Server.run_server()