all repos — cameraman @ 3e900b97c788b7eb05b8712b2a344ea2bd0e8fba

main.go (view raw)

 1package main
 2
 3import (
 4	"log"
 5	"os"
 6	"path"
 7	"time"
 8
 9	"github.com/gin-gonic/gin"
10	"github.com/joho/godotenv"
11	"gorm.io/driver/sqlite"
12	"gorm.io/gorm"
13)
14
15// Occurrence represents a scheduled event
16type Occurrence struct {
17	ID          uint      `gorm:"primaryKey" json:"id"`
18	Month       int       `json:"month"`
19	Day         int       `json:"day"`
20	Name        string    `json:"name"`
21	Description string    `json:"description"`
22	Notify      bool      `json:"notify"`
23	Notified    bool      `json:"notified"`
24	CreatedAt   time.Time `json:"-"`
25	UpdatedAt   time.Time `json:"-"`
26}
27
28var db *gorm.DB
29
30const (
31	dataDir = "data"
32	dbFile  = "occurrences.db"
33)
34
35func initDB() {
36	if _, err := os.Stat(dataDir); os.IsNotExist(err) {
37		err := os.Mkdir(dataDir, os.ModePerm)
38		if err != nil {
39			log.Fatal("Failed to create directory:", err)
40		}
41	}
42
43	var err error
44	db, err = gorm.Open(sqlite.Open(path.Join(dataDir, dbFile)), &gorm.Config{})
45	if err != nil {
46		log.Fatal("Failed to connect to database:", err)
47	}
48
49	db.AutoMigrate(&Occurrence{})
50}
51
52func loadEnv() {
53	if err := godotenv.Load(); err != nil {
54		log.Println("Error loading .env file")
55	}
56}
57
58func main() {
59	loadEnv()
60	initDB()
61	ParseTemplates()
62
63	go CheckOccurrences()
64
65	router := gin.Default()
66	router.POST("/occurrences", addOccurrence)
67	router.GET("/occurrences", getOccurrences)
68	router.DELETE("/occurrences/:id", deleteOccurrence)
69	router.GET("/", ShowIndexPage)
70
71	router.Run(":3000")
72}