mirror of
https://github.com/usememos/memos.git
synced 2024-11-24 06:35:24 +03:00
feat(mode): add demo mode (#1121)
* feat(mode): add demo mode * chroe: Update store/db/db.go Co-authored-by: boojack <stevenlgtm@gmail.com> * chroe: Update store/db/db.go Co-authored-by: boojack <stevenlgtm@gmail.com> --------- Co-authored-by: boojack <stevenlgtm@gmail.com>
This commit is contained in:
parent
d0b8b076cf
commit
afaaec8492
3
.vscode/settings.json
vendored
3
.vscode/settings.json
vendored
@ -1,4 +1,5 @@
|
||||
{
|
||||
"go.lintOnSave": "workspace",
|
||||
"go.lintTool": "golangci-lint"
|
||||
"go.lintTool": "golangci-lint",
|
||||
"go.inferGopath": false
|
||||
}
|
||||
|
@ -11,7 +11,7 @@ services:
|
||||
image: "${MEMOS_IMAGE}"
|
||||
volumes:
|
||||
- memos_volume:/var/opt/memos
|
||||
command: ["--mode", "dev"]
|
||||
command: ["--mode", "demo"]
|
||||
|
||||
volumes:
|
||||
memos_volume:
|
||||
|
@ -12,7 +12,7 @@ import (
|
||||
|
||||
// Profile is the configuration to start main server.
|
||||
type Profile struct {
|
||||
// Mode can be "prod" or "dev"
|
||||
// Mode can be "prod" or "dev" or "demo"
|
||||
Mode string `json:"mode"`
|
||||
// Port is the binding port for server
|
||||
Port int `json:"-"`
|
||||
@ -47,13 +47,13 @@ func checkDSN(dataDir string) (string, error) {
|
||||
// GetDevProfile will return a profile for dev or prod.
|
||||
func GetProfile() (*Profile, error) {
|
||||
profile := Profile{}
|
||||
flag.StringVar(&profile.Mode, "mode", "dev", "mode of server")
|
||||
flag.StringVar(&profile.Mode, "mode", "demo", "mode of server")
|
||||
flag.IntVar(&profile.Port, "port", 8081, "port of server")
|
||||
flag.StringVar(&profile.Data, "data", "", "data directory")
|
||||
flag.Parse()
|
||||
|
||||
if profile.Mode != "dev" && profile.Mode != "prod" {
|
||||
profile.Mode = "dev"
|
||||
if profile.Mode != "dev" && profile.Mode != "prod" && profile.Mode != "demo" {
|
||||
profile.Mode = "demo"
|
||||
}
|
||||
|
||||
if profile.Mode == "prod" && profile.Data == "" {
|
||||
|
@ -15,7 +15,7 @@ var Version = "0.10.3"
|
||||
var DevVersion = "0.10.3"
|
||||
|
||||
func GetCurrentVersion(mode string) string {
|
||||
if mode == "dev" {
|
||||
if mode == "dev" || mode == "demo" {
|
||||
return DevVersion
|
||||
}
|
||||
return Version
|
||||
|
@ -38,7 +38,7 @@ func (raw *activityRaw) toActivity() *api.Activity {
|
||||
|
||||
// CreateActivity creates an instance of Activity.
|
||||
func (s *Store) CreateActivity(ctx context.Context, create *api.ActivityCreate) (*api.Activity, error) {
|
||||
if s.profile.Mode != "dev" {
|
||||
if s.profile.Mode == "prod" {
|
||||
return nil, nil
|
||||
}
|
||||
|
||||
|
@ -49,17 +49,7 @@ func (db *DB) Open(ctx context.Context) (err error) {
|
||||
}
|
||||
db.DBInstance = sqliteDB
|
||||
|
||||
if db.profile.Mode == "dev" {
|
||||
// In dev mode, we should migrate and seed the database.
|
||||
if _, err := os.Stat(db.profile.DSN); errors.Is(err, os.ErrNotExist) {
|
||||
if err := db.applyLatestSchema(ctx); err != nil {
|
||||
return fmt.Errorf("failed to apply latest schema: %w", err)
|
||||
}
|
||||
if err := db.seed(ctx); err != nil {
|
||||
return fmt.Errorf("failed to seed: %w", err)
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if db.profile.Mode == "prod" {
|
||||
// If db file not exists, we should migrate the database.
|
||||
if _, err := os.Stat(db.profile.DSN); errors.Is(err, os.ErrNotExist) {
|
||||
if err := db.applyLatestSchema(ctx); err != nil {
|
||||
@ -120,6 +110,19 @@ func (db *DB) Open(ctx context.Context) (err error) {
|
||||
println(fmt.Sprintf("Failed to remove temp database file, err %v", err))
|
||||
}
|
||||
}
|
||||
} else {
|
||||
// In non-prod mode, we should migrate the database.
|
||||
if _, err := os.Stat(db.profile.DSN); errors.Is(err, os.ErrNotExist) {
|
||||
if err := db.applyLatestSchema(ctx); err != nil {
|
||||
return fmt.Errorf("failed to apply latest schema: %w", err)
|
||||
}
|
||||
// In demo mode, we should seed the database.
|
||||
if db.profile.Mode == "demo" {
|
||||
if err := db.seed(ctx); err != nil {
|
||||
return fmt.Errorf("failed to seed: %w", err)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
|
@ -26,8 +26,8 @@ const Auth = () => {
|
||||
const actionBtnLoadingState = useLoading(false);
|
||||
const { appearance, locale, systemStatus } = globalStore.state;
|
||||
const mode = systemStatus.profile.mode;
|
||||
const [username, setUsername] = useState(mode === "dev" ? "demohero" : "");
|
||||
const [password, setPassword] = useState(mode === "dev" ? "secret" : "");
|
||||
const [username, setUsername] = useState(mode === "demo" ? "demohero" : "");
|
||||
const [password, setPassword] = useState(mode === "demo" ? "secret" : "");
|
||||
const [identityProviderList, setIdentityProviderList] = useState<IdentityProvider[]>([]);
|
||||
|
||||
useEffect(() => {
|
||||
|
@ -65,7 +65,7 @@ export const useGlobalStore = () => {
|
||||
return store.getState().global;
|
||||
},
|
||||
isDev: () => {
|
||||
return state.systemStatus.profile.mode === "dev";
|
||||
return state.systemStatus.profile.mode !== "prod";
|
||||
},
|
||||
fetchSystemStatus: async () => {
|
||||
const { data: systemStatus } = (await api.getSystemStatus()).data;
|
||||
|
@ -14,7 +14,7 @@ const globalSlice = createSlice({
|
||||
systemStatus: {
|
||||
host: undefined,
|
||||
profile: {
|
||||
mode: "dev",
|
||||
mode: "demo",
|
||||
version: "",
|
||||
},
|
||||
dbSize: 0,
|
||||
|
Loading…
Reference in New Issue
Block a user