diff options
| author | nsfisis <nsfisis@gmail.com> | 2026-02-05 00:03:11 +0900 |
|---|---|---|
| committer | nsfisis <nsfisis@gmail.com> | 2026-02-05 00:03:45 +0900 |
| commit | 3f87e9a4d522d9b2d003b9eb2bb610dc164dae08 (patch) | |
| tree | 8daa034bf2ca65982738f84ff3ece9baefa969ba /main.go | |
| parent | 05a77ee41ebe35a38763ff9722357fa76d988a36 (diff) | |
| download | nilink-3f87e9a4d522d9b2d003b9eb2bb610dc164dae08.tar.gz nilink-3f87e9a4d522d9b2d003b9eb2bb610dc164dae08.tar.zst nilink-3f87e9a4d522d9b2d003b9eb2bb610dc164dae08.zip | |
add files
Diffstat (limited to 'main.go')
| -rw-r--r-- | main.go | 115 |
1 files changed, 115 insertions, 0 deletions
@@ -0,0 +1,115 @@ +package main + +import ( + "flag" + "fmt" + "os" +) + +func main() { + if len(os.Args) < 2 { + fmt.Fprintln(os.Stderr, "usage: nilink <serve|add|remove|list>") + os.Exit(1) + } + switch os.Args[1] { + case "serve": + cmdServe(os.Args[2:]) + case "add": + cmdAdd(os.Args[2:]) + case "remove": + cmdRemove(os.Args[2:]) + case "list": + cmdList(os.Args[2:]) + default: + fmt.Fprintf(os.Stderr, "unknown command: %s\n", os.Args[1]) + os.Exit(1) + } +} + +func cmdAdd(args []string) { + flags := flag.NewFlagSet("add", flag.ExitOnError) + dbPath := flags.String("db", "data/nilink.db", "database path") + flags.Parse(args) + + if flags.NArg() != 1 { + fmt.Fprintln(os.Stderr, "usage: nilink add [-db path] <url>") + os.Exit(1) + } + url := flags.Arg(0) + + db, err := openDB(*dbPath) + if err != nil { + fmt.Fprintf(os.Stderr, "error: %v\n", err) + os.Exit(1) + } + defer db.Close() + + id, err := insertLink(db, url) + if err != nil { + fmt.Fprintf(os.Stderr, "error: %v\n", err) + os.Exit(1) + } + short, err := encodeID(id) + if err != nil { + fmt.Fprintf(os.Stderr, "error: %v\n", err) + os.Exit(1) + } + fmt.Printf("%s %s\n", short, url) +} + +func cmdRemove(args []string) { + flags := flag.NewFlagSet("remove", flag.ExitOnError) + dbPath := flags.String("db", "data/nilink.db", "database path") + flags.Parse(args) + + if flags.NArg() != 1 { + fmt.Fprintln(os.Stderr, "usage: nilink remove [-db path] <short-id>") + os.Exit(1) + } + shortID := flags.Arg(0) + + id, err := decodeID(shortID) + if err != nil { + fmt.Fprintf(os.Stderr, "error: %v\n", err) + os.Exit(1) + } + + db, err := openDB(*dbPath) + if err != nil { + fmt.Fprintf(os.Stderr, "error: %v\n", err) + os.Exit(1) + } + defer db.Close() + + if err := deleteLink(db, id); err != nil { + fmt.Fprintf(os.Stderr, "error: %v\n", err) + os.Exit(1) + } +} + +func cmdList(args []string) { + flags := flag.NewFlagSet("list", flag.ExitOnError) + dbPath := flags.String("db", "data/nilink.db", "database path") + flags.Parse(args) + + db, err := openDB(*dbPath) + if err != nil { + fmt.Fprintf(os.Stderr, "error: %v\n", err) + os.Exit(1) + } + defer db.Close() + + links, err := listLinks(db) + if err != nil { + fmt.Fprintf(os.Stderr, "error: %v\n", err) + os.Exit(1) + } + for _, l := range links { + short, err := encodeID(l.ID) + if err != nil { + fmt.Fprintf(os.Stderr, "error: %v\n", err) + os.Exit(1) + } + fmt.Printf("%s %s %s\n", short, l.URL, l.CreatedAt) + } +} |
