- 集成 tauri-plugin-opener:Cargo/lib.rs/capabilities/npm 四处接线,新增 src/openExternal.ts(桌面走 opener,浏览器回退 window.open,相对路径绝对化) - 关于页 4 个链接、活动栏官网菜单、代理错误横幅 2 处健康检查链接全部改走 openExternal,桌面端可正常跳转 - 设置→外观 主题顺序调整为 深色/浅色/跟随系统 - release 二进制重编并验证(浏览器实测关于页链接可开文档页) - 附带工作区中未提交的扁平化重构现状(另一会话进行中) - homepage 落地页与文档终检通过(8787 / 与 /docs 双 200)
57 lines
1.8 KiB
Go
57 lines
1.8 KiB
Go
package store
|
|
|
|
import (
|
|
"database/sql"
|
|
"errors"
|
|
"time"
|
|
)
|
|
|
|
type PublishedDoc struct {
|
|
ProjectID string `json:"projectId"`
|
|
Name string `json:"name"`
|
|
Token string `json:"token"`
|
|
Content string `json:"-"`
|
|
UpdatedAt int64 `json:"updatedAt"`
|
|
}
|
|
|
|
func (s *Store) PublishedDocs() ([]PublishedDoc, error) {
|
|
rows, err := s.db.Query(`SELECT project_id,name,token,updated_at FROM published_docs ORDER BY name`)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
defer rows.Close()
|
|
docs := []PublishedDoc{}
|
|
for rows.Next() {
|
|
var doc PublishedDoc
|
|
if err := rows.Scan(&doc.ProjectID, &doc.Name, &doc.Token, &doc.UpdatedAt); err != nil {
|
|
return nil, err
|
|
}
|
|
docs = append(docs, doc)
|
|
}
|
|
return docs, rows.Err()
|
|
}
|
|
|
|
func (s *Store) PublishDoc(projectID, name, content string) (PublishedDoc, error) {
|
|
var token string
|
|
err := s.db.QueryRow(`SELECT token FROM published_docs WHERE project_id=?`, projectID).Scan(&token)
|
|
if errors.Is(err, sql.ErrNoRows) {
|
|
token = newMockToken()
|
|
} else if err != nil {
|
|
return PublishedDoc{}, err
|
|
}
|
|
doc := PublishedDoc{ProjectID: projectID, Name: name, Token: token, UpdatedAt: time.Now().Unix()}
|
|
_, err = s.db.Exec(`INSERT INTO published_docs(project_id,name,token,content,updated_at) VALUES(?,?,?,?,?) ON CONFLICT(project_id) DO UPDATE SET name=excluded.name,content=excluded.content,updated_at=excluded.updated_at`, projectID, name, token, content, doc.UpdatedAt)
|
|
return doc, err
|
|
}
|
|
|
|
func (s *Store) PublishedDocByToken(token string) (PublishedDoc, error) {
|
|
var doc PublishedDoc
|
|
err := s.db.QueryRow(`SELECT project_id,name,token,content,updated_at FROM published_docs WHERE token=?`, token).Scan(&doc.ProjectID, &doc.Name, &doc.Token, &doc.Content, &doc.UpdatedAt)
|
|
return doc, err
|
|
}
|
|
|
|
func (s *Store) RevokeDoc(projectID string) error {
|
|
_, err := s.db.Exec(`DELETE FROM published_docs WHERE project_id=?`, projectID)
|
|
return err
|
|
}
|