reseed directory fix

This commit is contained in:
Yared Yemane 2026-03-27 02:40:49 -07:00
parent 4b46fd60dc
commit e6fe8ab7e3

View File

@ -16,6 +16,52 @@ type resetAndReseedReq struct {
Confirm string `json:"confirm"` Confirm string `json:"confirm"`
} }
func resolveSeedDir(seedDir string) (string, error) {
cleanSeedDir := strings.TrimSpace(seedDir)
if cleanSeedDir == "" {
cleanSeedDir = "db/data"
}
// If absolute, use directly.
if filepath.IsAbs(cleanSeedDir) {
info, err := os.Stat(cleanSeedDir)
if err != nil {
return "", err
}
if !info.IsDir() {
return "", fmt.Errorf("seed dir is not a directory: %s", cleanSeedDir)
}
return cleanSeedDir, nil
}
candidates := make([]string, 0, 5)
// 1) Relative to current working directory.
candidates = append(candidates, filepath.Clean(cleanSeedDir))
// 2) Relative to executable directory (and parents).
if exePath, err := os.Executable(); err == nil {
exeDir := filepath.Dir(exePath)
candidates = append(candidates,
filepath.Join(exeDir, cleanSeedDir),
filepath.Join(exeDir, "..", cleanSeedDir),
filepath.Join(exeDir, "..", "..", cleanSeedDir),
)
}
for _, candidate := range candidates {
info, err := os.Stat(candidate)
if err != nil {
continue
}
if info.IsDir() {
return candidate, nil
}
}
return "", fmt.Errorf("seed directory not found (tried: %s)", strings.Join(candidates, ", "))
}
// ResetAndReseedDatabase godoc // ResetAndReseedDatabase godoc
// @Summary Reset and reseed database // @Summary Reset and reseed database
// @Description Dangerous operation: truncates all public tables (except schema_migrations) and reseeds from db/data SQL files. // @Description Dangerous operation: truncates all public tables (except schema_migrations) and reseeds from db/data SQL files.
@ -62,9 +108,12 @@ func (h *Handler) ResetAndReseedDatabase(c *fiber.Ctx) error {
} }
} }
seedDir := strings.TrimSpace(h.Cfg.DBSeedDir) seedDir, err := resolveSeedDir(h.Cfg.DBSeedDir)
if seedDir == "" { if err != nil {
seedDir = "db/data" return c.Status(fiber.StatusInternalServerError).JSON(domain.ErrorResponse{
Message: "Failed to resolve seed directory",
Error: err.Error(),
})
} }
seedFiles, err := filepath.Glob(filepath.Join(seedDir, "*.sql")) seedFiles, err := filepath.Glob(filepath.Join(seedDir, "*.sql"))
if err != nil { if err != nil {