首页
网站开发
桌面应用
管理软件
微信开发
App开发
嵌入式软件
工具软件
数据采集与分析
其他
首页
>
> 详细
SQL程序调试、讲解SQL编程语言、辅导program编程 讲解留学生Processing|讲解SPSS
项目预算:
开发周期:
发布时间:
要求地区:
1.SQL league tracker
Create Python web application that uses a MySQL database to manage clashes (i.e. matches or games) between players in a small sports league. Your application should handle two entities: Player and Clash.
a.OVERVIEW
Clashes are contests between two players. There can be many simultaneous active clashes. An active clash is a clash that has not ended. Players may participate in any number of clashes but can be in only one active clash at a time. Players must pay the entry fee to participate in a clash. Players with insufficient balance to pay the entry fee cannot join a clash. Players may deposit funds to increase their balance.
The player with the most points when the clash ends is the winner. The winner receives the clash prize. Clashes cannot end if both players have the same number of points (i.e. no ties allowed). The clash ends immediately if one player is disqualified (DQ). The other player is the winner and receives the prize.
b. TECHNICAL
Bind web server to port 3000.
Create a remote (host:port) instance of mysql.
Use mysql.connector python package. Other options may require additional dependencies. mysql-connector is maintained by the official MySQL Python team and is built with pure python.
c. SCHEMA AND DATATYPES
Assume the following base schema:
# USE db - note, db name specified in connection file
CREATE TABLE player (
player_id INT UNSIGNED NOT NULL AUTO_INCREMENT,
fname VARCHAR(20) NOT NULL CHECK (fname <> ''),
lname VARCHAR(20),
is_active BOOLEAN,
balance_usd DECIMAL(10,2) DEFAULT 0 CHECK (balance_usd >= 0),
handed ENUM('L', 'R', 'AMBI'),
PRIMARY KEY (player_id)
);
CREATE TABLE clash (
clash_id INT UNSIGNED NOT NULL AUTO_INCREMENT,
player1_id INT UNSIGNED NOT NULL,
player2_id INT UNSIGNED NOT NULL,
attendance INT UNSIGNED DEFAULT 0,
entry_fee_usd DECIMAL(10,2) NOT NULL CHECK (entry_fee_usd >= 0),
prize_usd DECIMAL(10,2) NOT NULL CHECK (prize_usd >= 0),
create_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
end_at DATETIME DEFAULT NULL,
PRIMARY KEY (clash_id),
CONSTRAINT pid1_fk FOREIGN KEY (player1_id) REFERENCES player(player_id) ON DELETE CASCADE,
CONSTRAINT pid2_fk FOREIGN KEY (player2_id) REFERENCES player(player_id) ON DELETE CASCADE,
CHECK (player1_id <> player2_id)
);
CREATE TABLE clash_point (
player_id INT UNSIGNED NOT NULL,
clash_id INT UNSIGNED,
points INT UNSIGNED,
is_dq BOOLEAN,
event_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (clash_id, event_at),
CONSTRAINT cid_fk FOREIGN KEY (clash_id) REFERENCES clash(clash_id) ON DELETE CASCADE,
CONSTRAINT pid_fk FOREIGN KEY (player_id) REFERENCES player(player_id) ON
DELETE CASCADE
);
You may extend the schema but DO NOT MODIFY ANY EXISTING ATTRIBUTES (see: GET /schema/extend). The autograder first calls the /admin/pre endpoint so you can run SQL “setup” statements prior to starting tests. Real (i.e. the human) graders will also review your schema for violations and other implementation issues.
Currency: Represent all currencies as USD (i.e. $xxx.xx). Use DECIMAL numbers with exactly two precision digits (i.e. dollars and cents). Numbers or strings with more than two digits are invalid. Append zeros as necessary if less than two digits, e.g. 1.332 is invalid (too many digits) but 1.33, 1.3, 1.0, and 1 are all valid (i.e. append zeros).
Time/Date: Report all times and dates as UTC ISO-8601 (always both date and time).
Boolean: Accept (case insensitive) “1”, “true”, and “t” as true Boolean values. Assume all other non-empty or null values are false.
Player Name: Use “fname lname” as player name. If lname is empty or null use only “fname”. The name must not include any trailing spaces.
Your application must implement the following API (see Response Syntax for entity detail). Assume the first response code if the response meets multiple conditions.
GET /player
Return: Array of all active Players. Sort by player name ASC (i.e. “A to Z”).
Response code: 200
GET /player/[pid] Return: Player[pid].
Response code: 200 if exist, 404 if not exist.
POST /player?fname=&lname=&handed=[enum]&initial_balance_usd=[currency]
Add a new active player. The query string may contain none, some, or all the parameters. First and last names may contain only letters. Handed should be one of (case-insensitive): “left”, “right”, or “ambi”. INSERT the player only if it satisfies the schema. Else fail.
Response code:
303 redirect on success to GET /player/[pid].
422 error on failure: body must be string that includes all invalid field names, e.g. “invalid fields:
initial_balance_usd” or “invalid fields: handed, fname, initial_balance_usd”, etc. You do not need to report the reason.
POST /player/[pid]?active=[bool]&lname=
Update Player[pid]. The query string may contain none, some, or all the parameters. UPDATE the player only if it satisfies the schema.
Response code:
303 redirect on success: GET /player/[id].
200 if exist, 404 if not exist.
POST /deposit/player/[pid]?amount_usd=[currency] Add positive currency to Player[pid] balance.
Return: PlayerBalance[pid]. Response code:
200 on success, 404 if player does not exist, and 400 if invalid amount.
GET /clash
Return: Array of Clashes. Return all active clashes sort by prize_usd DESC (i.e. “largest first”) and then the four most recently ended inactive clashes sorted by end_at DESC (“newest first”).
Response code: 200
GET /clash/[cid] Return: Clash[cid].
Response code: 200 if exist, 404 if not exist.
POST /clash?pid1=&pid2=&entry_fee_usd=[currency]&prize_usd=[currency]
Start a new Clash. Pid1 and Pid2 must exist, have balance sufficient to cover the entry fee, and not be in an active clash already.
Response code:
303 redirect on success to GET /clash/[cid].
404 if player1 or player2 does not exist.
409 if player1 or player2 already in an active clash.
402 if insufficient account balance (either player).
400 else.
POST /clash/[cid]/award/[pid]?points=
Points must be positive integer. Player must be in the clash and clash must be active. Return: Clash[cid].
Response code:
200 on success, 404 if player or clash does not exist, 409 if clash not active, 400 else.
POST /clash/[cid]/end
End an active clash. Clash must exist and be active. One player points must be higher than the other player points.
Return: Clash[cid].
Response Code:
200 if success, 404 if not exist, 409 if clash not active or points tied.
POST /clash/[cid]/disqualify/[pid]
Disqualify a player from clash and end the clash. Clash must be active and player must be in the clash. Return: Clash[cid].
Response code:
200 on success, 404 if player or clash does not exist, 409 if clash not active, 400 else.
GET /ping
Response code: 204 (always).
POST /admin/pre
Apply schema additions. The autograder creates the database and base schema before it runs your script. It will then issue GET /admin/pre. You may use the call to trigger any schema create/alter statements.
Return: string “OK” (no quotes).
Response code: 200 (always).
e.RESPONSE SYNTAX
Use JSON for all (non-empty) responses. Use the following syntax for entity response.
Player[pid]
{
pid: int player id
name: string “fname lname” - no trailing spaces
handed: string left|right|ambi
is_active boolean
num_join: int number of clashes
num_won: int number of clashes won
num_dq int number of disqualifications
balance_usd string currency string
total_points int total number of points in all clashes
rank int rank num_won, 1 = highest to N = lowest
(assume no tie)
spec_count int total number of spectators to see player clashes
total_prize_usd int total prize for player (currency string)
efficiency float % of *completed* clashes won
in_active_clash int
}
Clash[cid]
{
cid: int
p1_id: int
p1_name: string
p1_points: int
p2_id: int
p2_name: string
p2_points: int
winner_pid: int|null
is_active: boolean
prize_usd: string
age: int
ends_at: string
attendance int
}
PlayerBalance[pid]
{
old_balance_usd: string
new_balance_usd: string
}
f.DATABASE CONNECTION
Read the database connection info from a JSON file. Use the JSON file path ./config/mysql.json relative to your script. Exit with code 2 if the file is invalid: empty, does not exist, invalid JSON, etc. Exit with code 4 if the file is valid but the MySQL database connection fails for any reason.
{
host: "…",
port: "…",
user: "…",
pass: "…",
db: "…"
}
2.NoSQL (Mongo) request log
Use MongoDB to create an audit log for every incoming request.
Use a UUID (v4) to identify incoming request. Add a new document to the “request_log” collection for each request and include at least the following fields:
Then add the following to every JSON response:
DATABASE CONNECTION
Read the database connection info from a JSON file. Use the JSON file path ./config/mongo.json relative to your script. Your script should run as normal if the file does not exist ‐‐ i.e., skip mongo connect and do not log any requests. You may assume the server has no access‐control (i.e., no user/pass). Exit with code 2 if the file is invalid JSON. Exit with code 5 if the file is valid but MongoDB connection fails for any reason.
软件开发、广告设计客服
QQ:99515681
邮箱:99515681@qq.com
工作时间:8:00-23:00
微信:codinghelp
热点项目
更多
urba6006代写、java/c++编程语...
2024-12-26
代做program、代写python编程语...
2024-12-26
代写dts207tc、sql编程语言代做
2024-12-25
cs209a代做、java程序设计代写
2024-12-25
cs305程序代做、代写python程序...
2024-12-25
代写csc1001、代做python设计程...
2024-12-24
代写practice test preparatio...
2024-12-24
代写bre2031 – environmental...
2024-12-24
代写ece5550: applied kalman ...
2024-12-24
代做conmgnt 7049 – measurem...
2024-12-24
代写ece3700j introduction to...
2024-12-24
代做adad9311 designing the e...
2024-12-24
代做comp5618 - applied cyber...
2024-12-24
热点标签
mktg2509
csci 2600
38170
lng302
csse3010
phas3226
77938
arch1162
engn4536/engn6536
acx5903
comp151101
phl245
cse12
comp9312
stat3016/6016
phas0038
comp2140
6qqmb312
xjco3011
rest0005
ematm0051
5qqmn219
lubs5062m
eee8155
cege0100
eap033
artd1109
mat246
etc3430
ecmm462
mis102
inft6800
ddes9903
comp6521
comp9517
comp3331/9331
comp4337
comp6008
comp9414
bu.231.790.81
man00150m
csb352h
math1041
eengm4100
isys1002
08
6057cem
mktg3504
mthm036
mtrx1701
mth3241
eeee3086
cmp-7038b
cmp-7000a
ints4010
econ2151
infs5710
fins5516
fin3309
fins5510
gsoe9340
math2007
math2036
soee5010
mark3088
infs3605
elec9714
comp2271
ma214
comp2211
infs3604
600426
sit254
acct3091
bbt405
msin0116
com107/com113
mark5826
sit120
comp9021
eco2101
eeen40700
cs253
ece3114
ecmm447
chns3000
math377
itd102
comp9444
comp(2041|9044)
econ0060
econ7230
mgt001371
ecs-323
cs6250
mgdi60012
mdia2012
comm221001
comm5000
ma1008
engl642
econ241
com333
math367
mis201
nbs-7041x
meek16104
econ2003
comm1190
mbas902
comp-1027
dpst1091
comp7315
eppd1033
m06
ee3025
msci231
bb113/bbs1063
fc709
comp3425
comp9417
econ42915
cb9101
math1102e
chme0017
fc307
mkt60104
5522usst
litr1-uc6201.200
ee1102
cosc2803
math39512
omp9727
int2067/int5051
bsb151
mgt253
fc021
babs2202
mis2002s
phya21
18-213
cege0012
mdia1002
math38032
mech5125
07
cisc102
mgx3110
cs240
11175
fin3020s
eco3420
ictten622
comp9727
cpt111
de114102d
mgm320h5s
bafi1019
math21112
efim20036
mn-3503
fins5568
110.807
bcpm000028
info6030
bma0092
bcpm0054
math20212
ce335
cs365
cenv6141
ftec5580
math2010
ec3450
comm1170
ecmt1010
csci-ua.0480-003
econ12-200
ib3960
ectb60h3f
cs247—assignment
tk3163
ics3u
ib3j80
comp20008
comp9334
eppd1063
acct2343
cct109
isys1055/3412
math350-real
math2014
eec180
stat141b
econ2101
msinm014/msing014/msing014b
fit2004
comp643
bu1002
cm2030
联系我们
- QQ: 9951568
© 2021
www.rj363.com
软件定制开发网!