mirror of
https://github.com/aykhans/slash-e.git
synced 2026-09-23 14:26:49 +00:00
chore: remove seed data
This commit is contained in:
+2
-2
@@ -89,11 +89,11 @@ var (
|
|||||||
)
|
)
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
viper.SetDefault("mode", "demo")
|
viper.SetDefault("mode", "dev")
|
||||||
viper.SetDefault("driver", "sqlite")
|
viper.SetDefault("driver", "sqlite")
|
||||||
viper.SetDefault("port", 8082)
|
viper.SetDefault("port", 8082)
|
||||||
|
|
||||||
rootCmd.PersistentFlags().String("mode", "demo", `mode of server, can be "prod" or "dev" or "demo"`)
|
rootCmd.PersistentFlags().String("mode", "dev", `mode of server, can be "prod" or "dev"`)
|
||||||
rootCmd.PersistentFlags().String("addr", "", "address of server")
|
rootCmd.PersistentFlags().String("addr", "", "address of server")
|
||||||
rootCmd.PersistentFlags().Int("port", 8082, "port of server")
|
rootCmd.PersistentFlags().Int("port", 8082, "port of server")
|
||||||
rootCmd.PersistentFlags().String("data", "", "data directory")
|
rootCmd.PersistentFlags().String("data", "", "data directory")
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
import { useColorScheme } from "@mui/joy";
|
import { useColorScheme } from "@mui/joy";
|
||||||
import { useEffect } from "react";
|
import { useEffect } from "react";
|
||||||
import { Outlet } from "react-router-dom";
|
import { Outlet } from "react-router-dom";
|
||||||
import DemoBanner from "@/components/DemoBanner";
|
|
||||||
import { useWorkspaceStore } from "@/stores";
|
import { useWorkspaceStore } from "@/stores";
|
||||||
import useNavigateTo from "./hooks/useNavigateTo";
|
import useNavigateTo from "./hooks/useNavigateTo";
|
||||||
import { FeatureType } from "./stores/workspace";
|
import { FeatureType } from "./stores/workspace";
|
||||||
@@ -72,7 +71,6 @@ function App() {
|
|||||||
|
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
<DemoBanner />
|
|
||||||
<Outlet />
|
<Outlet />
|
||||||
</>
|
</>
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -1,27 +0,0 @@
|
|||||||
import { useWorkspaceStore } from "@/stores";
|
|
||||||
import Icon from "./Icon";
|
|
||||||
|
|
||||||
const DemoBanner: React.FC = () => {
|
|
||||||
const workspaceStore = useWorkspaceStore();
|
|
||||||
const shouldShow = workspaceStore.profile.mode === "demo";
|
|
||||||
|
|
||||||
if (!shouldShow) return null;
|
|
||||||
|
|
||||||
return (
|
|
||||||
<div className="z-10 relative flex flex-row items-center justify-center w-full py-2 text-sm sm:text-lg font-medium dark:text-gray-300 bg-white dark:bg-zinc-700 shadow">
|
|
||||||
<div className="w-full max-w-8xl px-4 md:px-12 flex flex-row justify-between items-center gap-x-3">
|
|
||||||
<span>✨🔗 Slash - An open source, self-hosted platform for sharing and managing your most frequently used links.</span>
|
|
||||||
<a
|
|
||||||
className="shadow flex flex-row justify-center items-center px-2 py-1 rounded-md text-sm sm:text-base text-white bg-blue-600 hover:bg-blue-700"
|
|
||||||
href="https://github.com/yourselfhosted/slash#deploy-with-docker-in-seconds"
|
|
||||||
target="_blank"
|
|
||||||
>
|
|
||||||
Install
|
|
||||||
<Icon.ExternalLink className="w-4 h-auto ml-1" />
|
|
||||||
</a>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
);
|
|
||||||
};
|
|
||||||
|
|
||||||
export default DemoBanner;
|
|
||||||
@@ -15,7 +15,7 @@ var Version = "1.0.0"
|
|||||||
var DevVersion = "1.0.0"
|
var DevVersion = "1.0.0"
|
||||||
|
|
||||||
func GetCurrentVersion(mode string) string {
|
func GetCurrentVersion(mode string) string {
|
||||||
if mode == "dev" || mode == "demo" {
|
if mode == "dev" {
|
||||||
return DevVersion
|
return DevVersion
|
||||||
}
|
}
|
||||||
return Version
|
return Version
|
||||||
|
|||||||
@@ -52,8 +52,8 @@ func checkDataDir(dataDir string) (string, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (p *Profile) Validate() error {
|
func (p *Profile) Validate() error {
|
||||||
if p.Mode != "demo" && p.Mode != "dev" && p.Mode != "prod" {
|
if p.Mode != "dev" && p.Mode != "prod" {
|
||||||
p.Mode = "demo"
|
p.Mode = "dev"
|
||||||
}
|
}
|
||||||
|
|
||||||
if p.Mode == "prod" && p.Data == "" {
|
if p.Mode == "prod" && p.Data == "" {
|
||||||
|
|||||||
+1
-44
@@ -22,8 +22,7 @@ import (
|
|||||||
//go:embed migration
|
//go:embed migration
|
||||||
var migrationFS embed.FS
|
var migrationFS embed.FS
|
||||||
|
|
||||||
//go:embed seed
|
|
||||||
var seedFS embed.FS
|
|
||||||
|
|
||||||
const (
|
const (
|
||||||
// MigrateFileNameSplit is the split character between the patch version and the description in the migration file name.
|
// MigrateFileNameSplit is the split character between the patch version and the description in the migration file name.
|
||||||
@@ -104,11 +103,6 @@ func (s *Store) Migrate(ctx context.Context) error {
|
|||||||
return errors.Wrapf(err, "failed to upsert migration history with version: %s", schemaVersion)
|
return errors.Wrapf(err, "failed to upsert migration history with version: %s", schemaVersion)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else if s.profile.Mode == "demo" {
|
|
||||||
// In demo mode, we should seed the database.
|
|
||||||
if err := s.seed(ctx); err != nil {
|
|
||||||
return errors.Wrap(err, "failed to seed")
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Manually migrate workspace settings.
|
// Manually migrate workspace settings.
|
||||||
@@ -171,43 +165,6 @@ func (s *Store) getMigrationBasePath() string {
|
|||||||
return fmt.Sprintf("migration/%s/%s/", s.profile.Driver, mode)
|
return fmt.Sprintf("migration/%s/%s/", s.profile.Driver, mode)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *Store) getSeedBasePath() string {
|
|
||||||
return fmt.Sprintf("seed/%s/", s.profile.Driver)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (s *Store) seed(ctx context.Context) error {
|
|
||||||
// Only seed for SQLite.
|
|
||||||
if s.profile.Driver != "sqlite" {
|
|
||||||
slog.Warn("seed is only supported for SQLite")
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
filenames, err := fs.Glob(seedFS, fmt.Sprintf("%s*.sql", s.getSeedBasePath()))
|
|
||||||
if err != nil {
|
|
||||||
return errors.Wrap(err, "failed to read seed files")
|
|
||||||
}
|
|
||||||
|
|
||||||
// Sort seed files by name. This is important to ensure that seed files are applied in order.
|
|
||||||
sort.Strings(filenames)
|
|
||||||
// Start a transaction to apply the seed files.
|
|
||||||
tx, err := s.driver.GetDB().Begin()
|
|
||||||
if err != nil {
|
|
||||||
return errors.Wrap(err, "failed to start transaction")
|
|
||||||
}
|
|
||||||
defer tx.Rollback()
|
|
||||||
// Loop over all seed files and execute them in order.
|
|
||||||
for _, filename := range filenames {
|
|
||||||
bytes, err := seedFS.ReadFile(filename)
|
|
||||||
if err != nil {
|
|
||||||
return errors.Wrapf(err, "failed to read seed file, filename=%s", filename)
|
|
||||||
}
|
|
||||||
if err := s.execute(ctx, tx, string(bytes)); err != nil {
|
|
||||||
return errors.Wrapf(err, "seed error: %s", filename)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return tx.Commit()
|
|
||||||
}
|
|
||||||
|
|
||||||
func (s *Store) GetCurrentSchemaVersion() (string, error) {
|
func (s *Store) GetCurrentSchemaVersion() (string, error) {
|
||||||
currentVersion := common.GetCurrentVersion(s.profile.Mode)
|
currentVersion := common.GetCurrentVersion(s.profile.Mode)
|
||||||
minorVersion := common.GetMinorVersion(currentVersion)
|
minorVersion := common.GetMinorVersion(currentVersion)
|
||||||
|
|||||||
@@ -1,34 +0,0 @@
|
|||||||
INSERT INTO
|
|
||||||
user (
|
|
||||||
`id`,
|
|
||||||
`role`,
|
|
||||||
`email`,
|
|
||||||
`nickname`,
|
|
||||||
`password_hash`
|
|
||||||
)
|
|
||||||
VALUES
|
|
||||||
(
|
|
||||||
101,
|
|
||||||
'ADMIN',
|
|
||||||
'slash@yourselfhosted.com',
|
|
||||||
'Slasher',
|
|
||||||
'$2a$10$H8HBWGcG/hoePhFy5SiNKOHxMD6omIpyEEWbl/fIorFC814bXW.Ua'
|
|
||||||
);
|
|
||||||
|
|
||||||
INSERT INTO
|
|
||||||
user (
|
|
||||||
`id`,
|
|
||||||
`role`,
|
|
||||||
`email`,
|
|
||||||
`nickname`,
|
|
||||||
`password_hash`
|
|
||||||
)
|
|
||||||
VALUES
|
|
||||||
(
|
|
||||||
102,
|
|
||||||
'USER',
|
|
||||||
'steven@yourselfhosted.com',
|
|
||||||
'Steven',
|
|
||||||
-- raw password: secret
|
|
||||||
'$2a$14$ajq8Q7fbtFRQvXpdCq7Jcuy.Rx1h/L4J60Otx.gyNLbAYctGMJ9tK'
|
|
||||||
);
|
|
||||||
@@ -1,94 +0,0 @@
|
|||||||
INSERT INTO
|
|
||||||
shortcut (
|
|
||||||
`id`,
|
|
||||||
`creator_id`,
|
|
||||||
`name`,
|
|
||||||
`link`,
|
|
||||||
`visibility`
|
|
||||||
)
|
|
||||||
VALUES
|
|
||||||
(
|
|
||||||
1,
|
|
||||||
101,
|
|
||||||
'discord',
|
|
||||||
'https://discord.gg/QZqUuUAhDV',
|
|
||||||
'PUBLIC'
|
|
||||||
);
|
|
||||||
|
|
||||||
INSERT INTO
|
|
||||||
shortcut (
|
|
||||||
`id`,
|
|
||||||
`creator_id`,
|
|
||||||
`name`,
|
|
||||||
`link`,
|
|
||||||
`visibility`,
|
|
||||||
`tag`,
|
|
||||||
`og_metadata`
|
|
||||||
)
|
|
||||||
VALUES
|
|
||||||
(
|
|
||||||
2,
|
|
||||||
101,
|
|
||||||
'ai-infra',
|
|
||||||
'https://star-history.com/blog/open-source-ai-infra-projects',
|
|
||||||
'PUBLIC',
|
|
||||||
'star-history ai',
|
|
||||||
'{"title":"Open Source AI Infra for Your Next Project","description":"Some open-source infra projects that can be directly used for your next project. 💡","image":"https://star-history.com/blog/assets/open-source-ai-infra-projects/banner.webp"}'
|
|
||||||
);
|
|
||||||
|
|
||||||
INSERT INTO
|
|
||||||
shortcut (
|
|
||||||
`id`,
|
|
||||||
`creator_id`,
|
|
||||||
`name`,
|
|
||||||
`link`,
|
|
||||||
`visibility`,
|
|
||||||
`tag`,
|
|
||||||
`og_metadata`
|
|
||||||
)
|
|
||||||
VALUES
|
|
||||||
(
|
|
||||||
3,
|
|
||||||
101,
|
|
||||||
'schema-change',
|
|
||||||
'https://www.bytebase.com/blog/how-to-handle-database-schema-change/#what-is-a-database-schema-change',
|
|
||||||
'PUBLIC',
|
|
||||||
'database article👍',
|
|
||||||
'{"title":"How to Handle Database Migration / Schema Change?","description":"A database schema is the structure of a database, which describes the relationships between the different tables and fields in the database. A database schema change, also known as schema migration, or simply migration refers to any alteration to this structure, such as adding a new table, modifying the data type of a field, or changing the relationships between tables.","image":"https://www.bytebase.com/_next/image/?url=%2Fcontent%2Fblog%2Fhow-to-handle-database-schema-change%2Fchange.webp\u0026w=2048\u0026q=75"}'
|
|
||||||
);
|
|
||||||
|
|
||||||
INSERT INTO
|
|
||||||
shortcut (
|
|
||||||
`id`,
|
|
||||||
`creator_id`,
|
|
||||||
`name`,
|
|
||||||
`link`,
|
|
||||||
`tag`,
|
|
||||||
`visibility`
|
|
||||||
)
|
|
||||||
VALUES
|
|
||||||
(
|
|
||||||
4,
|
|
||||||
101,
|
|
||||||
'sqlchat',
|
|
||||||
'https://www.sqlchat.ai',
|
|
||||||
'ai chatbot sql',
|
|
||||||
'WORKSPACE'
|
|
||||||
);
|
|
||||||
|
|
||||||
INSERT INTO
|
|
||||||
shortcut (
|
|
||||||
`id`,
|
|
||||||
`creator_id`,
|
|
||||||
`name`,
|
|
||||||
`link`,
|
|
||||||
`visibility`
|
|
||||||
)
|
|
||||||
VALUES
|
|
||||||
(
|
|
||||||
5,
|
|
||||||
102,
|
|
||||||
'stevenlgtm',
|
|
||||||
'https://github.com/boojack',
|
|
||||||
'PUBLIC'
|
|
||||||
);
|
|
||||||
@@ -1,20 +0,0 @@
|
|||||||
INSERT INTO
|
|
||||||
collection (
|
|
||||||
`id`,
|
|
||||||
`creator_id`,
|
|
||||||
`name`,
|
|
||||||
`title`,
|
|
||||||
`description`,
|
|
||||||
`visibility`,
|
|
||||||
`shortcut_ids`
|
|
||||||
)
|
|
||||||
VALUES
|
|
||||||
(
|
|
||||||
1,
|
|
||||||
101,
|
|
||||||
'minecraft',
|
|
||||||
'Minecraft',
|
|
||||||
'My daily thoughts and ideas',
|
|
||||||
'PUBLIC',
|
|
||||||
'1,2,3,4,5'
|
|
||||||
);
|
|
||||||
Reference in New Issue
Block a user