1
0
mirror of https://github.com/fumiama/paper-manager.git synced 2026-06-04 23:40:24 +08:00
Files
paper-manager/backend/generate.go
2023-04-25 00:36:46 +08:00

54 lines
1.4 KiB
Go

package backend
import (
"encoding/json"
"io"
"net/http"
"os"
"time"
"github.com/FloatTech/ttl"
"github.com/fumiama/go-docx"
"github.com/fumiama/paper-manager/backend/global"
)
var genfilecache = ttl.NewCache[int, *docx.Docx](time.Minute * 10)
func init() {
apimap["/api/genFile"] = &apihandler{"POST", func(w http.ResponseWriter, r *http.Request) {
user := usertokens.Get(r.Header.Get("Authorization"))
if user == nil {
writeresult(w, codeError, nil, errInvalidToken.Error(), typeError)
return
}
conf := global.GenerateConfig{}
defer r.Body.Close()
err := json.NewDecoder(r.Body).Decode(&conf)
if err != nil {
writeresult(w, codeError, nil, err.Error(), typeError)
return
}
docf, err := global.FileDB.GenerateFile(&conf)
if err != nil {
writeresult(w, codeError, nil, err.Error(), typeError)
return
}
genfilecache.Set(*user.ID, docf)
writeresult(w, codeSuccess, "请在10分钟内下载, 且不要在下载完成前关闭页面, 云端不会保存", messageOk, typeSuccess)
}}
apimap["/api/dlGen"] = &apihandler{"GET", func(w http.ResponseWriter, r *http.Request) {
user := usertokens.Get(r.Header.Get("Authorization"))
if user == nil {
writeresult(w, codeError, nil, errInvalidToken.Error(), typeError)
return
}
docf := genfilecache.Get(*user.ID)
if docf == nil {
writeresult(w, codeError, nil, os.ErrNotExist.Error(), typeError)
return
}
_, _ = io.Copy(w, docf)
}}
}