feat: system api with profiles

This commit is contained in:
email
2022-03-29 20:53:43 +08:00
parent 4f88221bce
commit b3a431570c
9 changed files with 111 additions and 43 deletions

View File

@@ -1,68 +0,0 @@
package cmd
import (
"fmt"
"os"
"path/filepath"
"strconv"
"strings"
)
type Profile struct {
// mode can be "release" or "dev"
mode string
// port is the binding port for server.
port int
// dsn points to where Memos stores its own data
dsn string
}
func checkDSN(dataDir string) (string, error) {
// Convert to absolute path if relative path is supplied.
if !filepath.IsAbs(dataDir) {
absDir, err := filepath.Abs(filepath.Dir(os.Args[0]) + "/" + dataDir)
if err != nil {
return "", err
}
dataDir = absDir
}
// Trim trailing / in case user supplies
dataDir = strings.TrimRight(dataDir, "/")
if _, err := os.Stat(dataDir); err != nil {
error := fmt.Errorf("unable to access -data %s, err %w", dataDir, err)
return "", error
}
return dataDir, nil
}
// GetDevProfile will return a profile for dev.
func GetProfile() Profile {
mode := os.Getenv("mode")
if mode != "dev" && mode != "release" {
mode = "dev"
}
port, err := strconv.Atoi(os.Getenv("port"))
if err != nil {
port = 8080
}
data := os.Getenv("data")
dataDir, err := checkDSN(data)
if err != nil {
fmt.Printf("Failed to check dsn: %s, err: %+v\n", dataDir, err)
os.Exit(1)
}
dsn := fmt.Sprintf("file:%s/memos_%s.db", dataDir, mode)
return Profile{
mode: mode,
port: port,
dsn: dsn,
}
}

View File

@@ -4,40 +4,28 @@ import (
"fmt"
"os"
"memos/common"
"memos/server"
"memos/store"
)
type Main struct {
profile *Profile
profile *common.Profile
server *server.Server
db *store.DB
}
func Execute() {
m := Main{}
profile := GetProfile()
m.profile = &profile
err := m.Run()
if err != nil {
fmt.Printf("%+v\n", err)
os.Exit(1)
}
}
func (m *Main) Run() error {
db := store.NewDB(m.profile.dsn, m.profile.mode)
db := store.NewDB(m.profile)
if err := db.Open(); err != nil {
return fmt.Errorf("cannot open db: %w", err)
}
m.db = db
s := server.NewServer(m.profile.port, m.profile.mode)
s := server.NewServer(m.profile)
s.ShortcutService = store.NewShortcutService(db)
s.MemoService = store.NewMemoService(db)
@@ -53,3 +41,16 @@ func (m *Main) Run() error {
return nil
}
func Execute() {
profile := common.GetProfile()
m := Main{
profile: &profile,
}
err := m.Run()
if err != nil {
fmt.Printf("%+v\n", err)
os.Exit(1)
}
}