Move to Xorm [1/N]

Signed-off-by: Yuan Si <do4suki@gmail.com>
This commit is contained in:
2023-04-12 00:52:18 +08:00
parent 93cac9e6f6
commit fe1e012127
15 changed files with 753 additions and 203 deletions
+25 -34
View File
@@ -1,7 +1,6 @@
package handler
import (
"database/sql"
"encoding/base64"
"encoding/json"
"fmt"
@@ -18,10 +17,6 @@ import (
)
func AlbumSeriesAllHandler(ctx *gin.Context) {
db, err := sql.Open("sqlite3", "assets/main.db")
CheckErr(err)
defer db.Close()
reqTime := time.Now().Unix()
authorizeStr := ctx.Request.Header["Authorize"]
@@ -53,26 +48,24 @@ func AlbumSeriesAllHandler(ctx *gin.Context) {
newAuthorizeStr := fmt.Sprintf("consumerKey=lovelive_test&timeStamp=%d&version=1.1&token=%s&nonce=%d&user_id=%s&requestTimeStamp=%d", respTime, authToken, nonce, userId[0], reqTime)
// fmt.Println(newAuthorizeStr)
//
sql := `SELECT album_series_id FROM album_series_m`
seriesRows, err := db.Query(sql)
var albumIds []int
err = MainEng.Table("album_series_m").Select("album_series_id").Find(&albumIds)
CheckErr(err)
albumSeriesAllResp := []model.AlbumSeriesResp{}
for seriesRows.Next() {
var series int
err = seriesRows.Scan(&series)
// fmt.Println(albumIds)
albumSeriesAllRes := []model.AlbumSeriesRes{}
for _, albumId := range albumIds {
AlbumStmt, err := MainEng.DB().Prepare("SELECT unit_id,rarity FROM unit_m WHERE album_series_id = ?")
CheckErr(err)
defer AlbumStmt.Close()
rows, err := AlbumStmt.Query(albumId)
CheckErr(err)
albumSeriesAll := []model.AlbumResult{}
stmt, err := db.Prepare("SELECT unit_id,rarity FROM unit_m WHERE album_series_id = ?")
CheckErr(err)
unitRows, err := stmt.Query(series)
CheckErr(err)
for unitRows.Next() {
for rows.Next() {
var unitId, rarity int
err = unitRows.Scan(&unitId, &rarity)
err = rows.Scan(&unitId, &rarity)
CheckErr(err)
albumSeries := model.AlbumResult{
@@ -105,17 +98,15 @@ func AlbumSeriesAllHandler(ctx *gin.Context) {
albumSeries.HighestLovePerUnit = 1000
// IsSigned
stmt, err = db.Prepare("SELECT COUNT(*) AS ct FROM unit_sign_asset_m WHERE unit_id = ?")
signStmt, err := MainEng.DB().Prepare("SELECT COUNT(*) AS ct FROM unit_sign_asset_m WHERE unit_id = ?")
CheckErr(err)
signRows, err := stmt.Query(unitId)
defer signStmt.Close()
var count int
err = signStmt.QueryRow(unitId).Scan(&count)
CheckErr(err)
ct := 0
for signRows.Next() {
err = signRows.Scan(&ct)
CheckErr(err)
}
if ct > 0 {
if count > 0 {
albumSeries.SignFlag = true
} else {
albumSeries.SignFlag = false
@@ -124,15 +115,15 @@ func AlbumSeriesAllHandler(ctx *gin.Context) {
albumSeriesAll = append(albumSeriesAll, albumSeries)
}
albumSeriesAllResp = append(albumSeriesAllResp, model.AlbumSeriesResp{
SeriesID: series,
albumSeriesAllRes = append(albumSeriesAllRes, model.AlbumSeriesRes{
SeriesID: albumId,
UnitList: albumSeriesAll,
})
}
rb, err := json.Marshal(albumSeriesAllResp)
CheckErr(err)
resp := model.Response{
ResponseData: rb,
resp := model.AlbumSeriesResp{
ResponseData: albumSeriesAllRes,
ReleaseInfo: []interface{}{},
StatusCode: 200,
}
+5 -16
View File
@@ -1,7 +1,6 @@
package handler
import (
"database/sql"
"encoding/base64"
"encoding/json"
"fmt"
@@ -18,10 +17,6 @@ import (
)
func DownloadAdditionalHandler(ctx *gin.Context) {
db, err := sql.Open("sqlite3", "assets/main.db")
CheckErr(err)
defer db.Close()
reqTime := time.Now().Unix()
authorizeStr := ctx.Request.Header["Authorize"]
@@ -60,8 +55,9 @@ func DownloadAdditionalHandler(ctx *gin.Context) {
pkgList := []model.AdditionalResult{}
if CdnUrl != "" {
pkgType, pkgId := downloadReq.PackageType, downloadReq.PackageID
stmt, err := db.Prepare("SELECT pkg_order,pkg_size FROM download_db WHERE pkg_type = ? AND pkg_id = ? ORDER BY pkg_order ASC")
stmt, err := MainEng.DB().Prepare("SELECT pkg_order,pkg_size FROM download_db WHERE pkg_type = ? AND pkg_id = ? ORDER BY pkg_order ASC")
CheckErr(err)
defer stmt.Close()
rows, err := stmt.Query(pkgType, pkgId)
CheckErr(err)
for rows.Next() {
@@ -93,10 +89,6 @@ func DownloadAdditionalHandler(ctx *gin.Context) {
}
func DownloadBatchHandler(ctx *gin.Context) {
db, err := sql.Open("sqlite3", "assets/main.db")
CheckErr(err)
defer db.Close()
reqTime := time.Now().Unix()
authorizeStr := ctx.Request.Header["Authorize"]
@@ -143,8 +135,9 @@ func DownloadBatchHandler(ctx *gin.Context) {
exPkgId = fmt.Sprintf("AND pkg_id NOT IN (%s)", exPkgId)
}
// fmt.Println(exPkgId)
stmt, err := db.Prepare("SELECT pkg_id,pkg_order,pkg_size FROM download_db WHERE pkg_type = ? " + exPkgId + " ORDER BY pkg_id ASC, pkg_order ASC")
stmt, err := MainEng.DB().Prepare("SELECT pkg_id,pkg_order,pkg_size FROM download_db WHERE pkg_type = ? " + exPkgId + " ORDER BY pkg_id ASC, pkg_order ASC")
CheckErr(err)
defer stmt.Close()
rows, err := stmt.Query(pkgType)
CheckErr(err)
for rows.Next() {
@@ -176,10 +169,6 @@ func DownloadBatchHandler(ctx *gin.Context) {
}
func DownloadUpdateHandler(ctx *gin.Context) {
db, err := sql.Open("sqlite3", "assets/main.db")
CheckErr(err)
defer db.Close()
reqTime := time.Now().Unix()
authorizeStr := ctx.Request.Header["Authorize"]
@@ -218,7 +207,7 @@ func DownloadUpdateHandler(ctx *gin.Context) {
pkgList := []model.UpdateResult{}
if downloadReq.ExternalVersion != PackageVersion && CdnUrl != "" {
pkgType := 99
rows, err := db.Query("SELECT pkg_id,pkg_order,pkg_size FROM download_db WHERE pkg_type = 99 ORDER BY pkg_id ASC, pkg_order ASC")
rows, err := MainEng.DB().Query("SELECT pkg_id,pkg_order,pkg_size FROM download_db WHERE pkg_type = 99 ORDER BY pkg_id ASC, pkg_order ASC")
CheckErr(err)
for rows.Next() {
var pkgId, pkgOrder, pkgSize int
+10 -1
View File
@@ -1,18 +1,27 @@
package handler
import "honoka-chan/config"
import (
"honoka-chan/config"
"xorm.io/xorm"
)
var (
nonce = 0
PackageVersion = "97.4.6"
CdnUrl string
ErrorMsg = `{"code":20001,"message":""}`
MainEng *xorm.Engine
UserEng *xorm.Engine
)
func init() {
if config.Conf.Cdn.CdnUrl != "" {
CdnUrl = config.Conf.Cdn.CdnUrl
}
MainEng = config.MainEng
UserEng = config.UserEng
}
func CheckErr(err error) {
+6 -37
View File
@@ -1,7 +1,6 @@
package handler
import (
"database/sql"
"encoding/base64"
"encoding/json"
"fmt"
@@ -103,11 +102,6 @@ func PlayLiveHandler(ctx *gin.Context) {
newAuthorizeStr := fmt.Sprintf("consumerKey=lovelive_test&timeStamp=%d&version=1.1&token=%s&nonce=%d&user_id=%s&requestTimeStamp=%d", respTime, authToken, nonce, userId[0], reqTime)
// fmt.Println(newAuthorizeStr)
db, err := sql.Open("sqlite3", "assets/main.db")
CheckErr(err)
defer db.Close()
db.SetMaxOpenConns(1)
tDifficultyId := playReq.LiveDifficultyID
difficultyId, err := strconv.Atoi(tDifficultyId)
CheckErr(err)
@@ -116,15 +110,10 @@ func PlayLiveHandler(ctx *gin.Context) {
// Song type: normal / special
// sqlite3 doesn't support FULL OUTER JOIN so use UNION ALL here.
sql := `SELECT notes_setting_asset,c_rank_score,b_rank_score,a_rank_score,s_rank_score,ac_flag,swing_flag FROM live_setting_m WHERE live_setting_id IN (SELECT live_setting_id FROM normal_live_m WHERE live_difficulty_id = ? UNION ALL SELECT live_setting_id FROM special_live_m WHERE live_difficulty_id = ?)`
rows, err := db.Query(sql, difficultyId, difficultyId)
CheckErr(err)
var notes_setting_asset string
var c_rank_score, b_rank_score, a_rank_score, s_rank_score, ac_flag, swing_flag int
for rows.Next() {
err = rows.Scan(&notes_setting_asset, &c_rank_score, &b_rank_score, &a_rank_score, &s_rank_score, &ac_flag, &swing_flag)
CheckErr(err)
}
err = MainEng.DB().QueryRow(sql, difficultyId, difficultyId).Scan(&notes_setting_asset, &c_rank_score, &b_rank_score, &a_rank_score, &s_rank_score, &ac_flag, &swing_flag)
CheckErr(err)
// fmt.Println(notes_setting_asset)
// fmt.Println(c_rank_score, b_rank_score, a_rank_score, s_rank_score)
@@ -307,11 +296,6 @@ func PlayScoreHandler(ctx *gin.Context) {
newAuthorizeStr := fmt.Sprintf("consumerKey=lovelive_test&timeStamp=%d&version=1.1&token=%s&nonce=%d&user_id=%s&requestTimeStamp=%d", respTime, authToken, nonce, userId[0], reqTime)
// fmt.Println(newAuthorizeStr)
db, err := sql.Open("sqlite3", "assets/main.db")
CheckErr(err)
defer db.Close()
db.SetMaxOpenConns(1)
tDifficultyId := playScoreReq.LiveDifficultyID
difficultyId, err := strconv.Atoi(tDifficultyId)
CheckErr(err)
@@ -319,15 +303,10 @@ func PlayScoreHandler(ctx *gin.Context) {
// Song type: normal / special
// sqlite3 doesn't support FULL OUTER JOIN so use UNION ALL here.
sql := `SELECT notes_setting_asset,c_rank_score,b_rank_score,a_rank_score,s_rank_score,ac_flag,swing_flag FROM live_setting_m WHERE live_setting_id IN (SELECT live_setting_id FROM normal_live_m WHERE live_difficulty_id = ? UNION ALL SELECT live_setting_id FROM special_live_m WHERE live_difficulty_id = ?)`
rows, err := db.Query(sql, difficultyId, difficultyId)
CheckErr(err)
var notes_setting_asset string
var c_rank_score, b_rank_score, a_rank_score, s_rank_score, ac_flag, swing_flag int
for rows.Next() {
err = rows.Scan(&notes_setting_asset, &c_rank_score, &b_rank_score, &a_rank_score, &s_rank_score, &ac_flag, &swing_flag)
CheckErr(err)
}
err = MainEng.DB().QueryRow(sql, difficultyId, difficultyId).Scan(&notes_setting_asset, &c_rank_score, &b_rank_score, &a_rank_score, &s_rank_score, &ac_flag, &swing_flag)
CheckErr(err)
// fmt.Println(notes_setting_asset)
// fmt.Println(c_rank_score, b_rank_score, a_rank_score, s_rank_score)
@@ -446,24 +425,14 @@ func PlayRewardHandler(ctx *gin.Context) {
newAuthorizeStr := fmt.Sprintf("consumerKey=lovelive_test&timeStamp=%d&version=1.1&token=%s&nonce=%d&user_id=%s&requestTimeStamp=%d", respTime, authToken, nonce, userId[0], reqTime)
// fmt.Println(newAuthorizeStr)
db, err := sql.Open("sqlite3", "assets/main.db")
CheckErr(err)
defer db.Close()
db.SetMaxOpenConns(1)
difficultyId := playRewardReq.LiveDifficultyID
// Song type: normal / special
// sqlite3 doesn't support FULL OUTER JOIN so use UNION ALL here.
sql := `SELECT c_rank_score,b_rank_score,a_rank_score,s_rank_score,c_rank_combo,b_rank_combo,a_rank_combo,s_rank_combo,ac_flag,swing_flag FROM live_setting_m WHERE live_setting_id IN (SELECT live_setting_id FROM normal_live_m WHERE live_difficulty_id = ? UNION ALL SELECT live_setting_id FROM special_live_m WHERE live_difficulty_id = ?)`
rows, err := db.Query(sql, difficultyId, difficultyId)
CheckErr(err)
var c_rank_score, b_rank_score, a_rank_score, s_rank_score, c_rank_combo, b_rank_combo, a_rank_combo, s_rank_combo, ac_flag, swing_flag int
for rows.Next() {
err = rows.Scan(&c_rank_score, &b_rank_score, &a_rank_score, &s_rank_score, &c_rank_combo, &b_rank_combo, &a_rank_combo, &s_rank_combo, &ac_flag, &swing_flag)
CheckErr(err)
}
err = MainEng.DB().QueryRow(sql, difficultyId, difficultyId).Scan(&c_rank_score, &b_rank_score, &a_rank_score, &s_rank_score, &c_rank_combo, &b_rank_combo, &a_rank_combo, &s_rank_combo, &ac_flag, &swing_flag)
CheckErr(err)
unitsList := []model.PlayRewardUnitList{}
deck, err := database.LevelDb.Get([]byte("deck_info"))
+4 -11
View File
@@ -1,7 +1,6 @@
package handler
import (
"database/sql"
"encoding/base64"
"encoding/json"
"fmt"
@@ -117,19 +116,13 @@ func LoginHandler(ctx *gin.Context) {
}
nonce++
db, err := sql.Open("sqlite3", "assets/account.db")
stmt, err := UserEng.DB().Prepare("SELECT userid FROM user_key WHERE key = ?")
CheckErr(err)
defer db.Close()
defer stmt.Close()
stmt, err := db.Prepare("SELECT userid FROM user_key WHERE key = ?")
CheckErr(err)
rows, err := stmt.Query(string(keyDescrypted))
CheckErr(err)
var userId int
for rows.Next() {
err = rows.Scan(&userId)
CheckErr(err)
}
err = stmt.QueryRow(string(keyDescrypted)).Scan(&userId)
CheckErr(err)
if userId == 0 {
userId = 9999999
+31 -36
View File
@@ -1,7 +1,6 @@
package handler
import (
"database/sql"
"encoding/base64"
"encoding/json"
"fmt"
@@ -222,19 +221,13 @@ func LoginAutoHandler(ctx *gin.Context) {
return
}
db, err := sql.Open("sqlite3", "assets/account.db")
stmt, err := UserEng.DB().Prepare("SELECT userid,ticket AS ct FROM users WHERE autokey = ?")
CheckErr(err)
defer db.Close()
defer stmt.Close()
stmt, err := db.Prepare("SELECT userid,ticket AS ct FROM users WHERE autokey = ?")
CheckErr(err)
rows, err := stmt.Query(autoKey)
CheckErr(err)
var userid, ticket string
for rows.Next() {
err = rows.Scan(&userid, &ticket)
CheckErr(err)
}
err = stmt.QueryRow(autoKey).Scan(&userid, &ticket)
CheckErr(err)
var resp string
if userid != "" {
@@ -320,62 +313,62 @@ func AccountLoginHandler(ctx *gin.Context) {
// "userid" INTEGER,
// "key" INTEGER
// );`
db, err := sql.Open("sqlite3", "assets/account.db")
stmt, err := UserEng.DB().Prepare("SELECT password,autokey,ticket,userid FROM users WHERE phone = ?")
CheckErr(err)
defer db.Close()
defer stmt.Close()
stmt, err := db.Prepare("SELECT password,autokey,ticket,userid FROM users WHERE phone = ?")
CheckErr(err)
rows, err := stmt.Query(phone)
CheckErr(err)
var pass, autokey, ticket, userid string
for rows.Next() {
err = rows.Scan(&pass, &autokey, &ticket, &userid)
CheckErr(err)
}
err = stmt.QueryRow(phone).Scan(&pass, &autokey, &ticket, &userid)
CheckErr(err)
loginResp := LoginResp{}
loginCode := 0
loginMsg := "ok"
loginTime := time.Now().Unix()
if pass == "" {
// 未注册 - 自动注册
trans, err := db.Begin()
if err != nil {
trans.Rollback()
session := UserEng.NewSession()
defer session.Close()
if err = session.Begin(); err != nil {
session.Rollback()
panic(err)
}
pass = openssl.Md5ToString(password)
autokey = "AUTO" + strings.ToUpper(utils.RandomStr(32))
userid = strconv.Itoa(int(loginTime))
ticket = "9999999" + userid + userid
stmt, err = trans.Prepare("INSERT INTO users(phone,password,autokey,ticket,userid,last_login_time) VALUES (?,?,?,?,?,?)")
userStmt, err := session.DB().Prepare("INSERT INTO users(phone,password,autokey,ticket,userid,last_login_time) VALUES (?,?,?,?,?,?)")
if err != nil {
trans.Rollback()
session.Rollback()
panic(err)
}
_, err = stmt.Exec(phone, pass, autokey, ticket, userid, loginTime)
defer userStmt.Close()
_, err = userStmt.Exec(phone, pass, autokey, ticket, userid, loginTime)
if err != nil {
trans.Rollback()
session.Rollback()
panic(err)
}
// id, _ := res.LastInsertId()
// fmt.Println("LastInsertId:", id)
stmt, err = trans.Prepare("INSERT INTO user_key(userid,key) VALUES(?,?)")
keyStmt, err := session.DB().Prepare("INSERT INTO user_key(userid,key) VALUES(?,?)")
if err != nil {
trans.Rollback()
session.Rollback()
panic(err)
}
// 方便起见初始化 userid 和 key 一样
// 注意:user_key 表中的 key 是上文生成的用于登录的 userid,而 userid 则是用于 Authorize Token 生成用的
_, err = stmt.Exec(userid, userid)
_, err = keyStmt.Exec(userid, userid)
if err != nil {
trans.Rollback()
session.Rollback()
panic(err)
}
if err = trans.Commit(); err != nil {
trans.Rollback()
if err = session.Commit(); err != nil {
session.Rollback()
panic(err)
}
@@ -401,9 +394,11 @@ func AccountLoginHandler(ctx *gin.Context) {
loginResp.Userid = userid // 实际登录用的账号
// 更新信息
stmt, err = db.Prepare("UPDATE users SET autokey=?,ticket=?,last_login_time=? WHERE userid=?")
userStmt, err := UserEng.DB().Prepare("UPDATE users SET autokey=?,ticket=?,last_login_time=? WHERE userid=?")
CheckErr(err)
_, err := stmt.Exec(autokey, ticket, loginTime, userid)
defer userStmt.Close()
_, err = userStmt.Exec(autokey, ticket, loginTime, userid)
CheckErr(err)
// aff, _ := res.RowsAffected()
// fmt.Println("RowsAffected:", aff)