Spring 自习室座位预订的设计与实现 - 01

数据库和RESTful API 设计

看到标题,没错这就是毕设。 暂定使用Spring + vue.js 实现,使用RESTful设计。真是学了什么都学了一点Rust/C++/Qt/Python,还想着搞个Rust,为了保(好)险(copy)到最后还是用了Spring。

数据库

几个实体

用户(学生)(user)-> u_id, u_username, u_password, u_description

管理员 (admin)-> a_username, a_password

订单 (order) -> o_id, o_timestamp,o_startTime, o_endTime, o_description, user_id

自习室 (room) -> r_id, r_name, r_location, r_description, r_seatsMap, r_startTime, r_endTime, r_split

座位 (seat) -> s_id, s_timeLinked, s_orderedTimeLinked, s_nextDayOrderdTimeLinked, r_id

  1. 为了简单只能预订今天和后一天,座位信息在预订开始时全部刷新。0点时将 s_nextDayOrderdTimeLinked 移动到 s_orderedTimeLinked。
  2. r_seatsMap 一个二维数组,0为空, -1 为不可用,正常使用s_id,前端拿到整个 seats 数据将数据添加到 seatsMap 进行渲染。(把是否有足够是时间放到vue.js上计算,给服务器减轻压力)

API

-u base64(":key") 在HTTP头,"Authorization"内

prefix /user

/login?username&password \post -> key
/logout -u \get -> key removed
/info -u \get #获取个人信息,名字,手机号,描述,

prefix /admin

/login?username&password \post -> key 
/logout -u \get -> key removed
/info -u get

prefix /room

/ -u \get #获取全部自习室信息,名字,id
/:id/seats -u \get #获取座位表
/:id -u \get #获取指定自习室信息,名字,id,描述,起始时间等
/:id -u \post #更新指定自习室信息
/:id -u \delete  #删除指定自习室

prefix /seat

/:id -u \get 通过room id获取全部seats
/order -u \post #订座

prefix /order

/ -u \get
/num/:num-u \get #获取0开始num个订单
/start/:start/num/:num-u \get #获取start开始num个订单

应该还有很多没有想到,一开始想的为了减少seats的查寻设计了一个tmp表,最后想想还在直接在内存中操作吧,redis还没有接触过,看看再想是不是要加上。