some changes

posts
serr 2025-04-10 22:43:47 +03:00
parent 70d82d69d1
commit b68851c862
9 changed files with 43 additions and 50 deletions

30
main.go
View File

@ -12,11 +12,19 @@ import (
)
func main() {
var app *models.App
var err error
// Инициализация конфига
if err := models.Cfg.Load("config.json"); err != nil {
log.Fatal(err)
}
// Инициализация приложения
if app, err = models.AppInit(); err != nil {
// Загрузка постов
if err := models_pages.LoadPosts(models.Cfg.PostsDir); err != nil {
log.Fatal(err)
}
// Инициализация приложения (обязательно после инициализации конфига)
if err := models.InitApp(); err != nil {
log.Fatal(err)
}
@ -24,14 +32,14 @@ func main() {
log.SetPrefix(fmt.Sprintf("%s | ", models.Cfg.ServerDomain))
// Настройка маршрутов и запуск
if setupRoutesAndRun(app) != nil {
if setupRoutesAndRun() != nil {
log.Fatal(err)
}
}
func setupRoutesAndRun(a *models.App) error {
func setupRoutesAndRun() error {
// Настройка маршрутов
router := setupRoutes(a)
router := setupRoutes()
// Запуск сервера
if ok, err := tools.IsIPInUse(models.Cfg.ServerIP); err != nil {
@ -46,7 +54,7 @@ func setupRoutesAndRun(a *models.App) error {
}
// Настраивает маршруты
func setupRoutes(a *models.App) *http.ServeMux {
func setupRoutes() *http.ServeMux {
router := http.NewServeMux()
// Цепочка обработчиков, которые сработают до отдачи страницы юзеру
@ -58,15 +66,15 @@ func setupRoutes(a *models.App) *http.ServeMux {
// Главные странички
{
// Обработка главной страницы (русская версия)
router.Handle("/ru/", m(controllers_pages.MainRuPageHandler(a)))
router.Handle("/ru/", m(controllers_pages.MainRuPageHandler()))
// Обработка главной страницы
router.Handle("/", m(controllers_pages.MainPageHandler(a)))
router.Handle("/", m(controllers_pages.MainPageHandler()))
// Обработка страницы со списком постов
router.Handle("/posts/", m(controllers_pages.PostsPageHandler(a)))
router.Handle("/posts/", m(controllers_pages.PostsPageHandler()))
// Обработка страничек постов
for key := range models_pages.GetPosts() {
postLink := string(key)
router.Handle(postLink, m(controllers_pages.PostPageHandler(a)))
router.Handle(postLink, m(controllers_pages.PostPageHandler()))
}
}

View File

@ -10,7 +10,7 @@ import (
)
// Обработчик главной страницы
func MainPageHandler(a *models.App) http.HandlerFunc {
func MainPageHandler() http.HandlerFunc {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
var err error
@ -40,7 +40,7 @@ func MainPageHandler(a *models.App) http.HandlerFunc {
// Страничка рендерится только если ее нет в кэше
pageData, ok := models.PagesCache.Get(models_pages.MainPageTmplName)
if !ok {
pageData, err = models_pages.RenderMainPage(a.Templates, a.Version)
pageData, err = models_pages.RenderMainPage(models.App.Templates, models.App.Version)
if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
return

View File

@ -7,14 +7,14 @@ import (
)
// Обработчик главной страницы
func MainRuPageHandler(a *models.App) http.HandlerFunc {
func MainRuPageHandler() http.HandlerFunc {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
var err error
// Страничка рендерится только если ее нет в кэше
pageData, ok := models.PagesCache.Get(models_pages.MainRuPageTmplName)
if !ok {
pageData, err = models_pages.RenderMainRuPage(a.Templates, a.Version)
pageData, err = models_pages.RenderMainRuPage(models.App.Templates, models.App.Version)
if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
return

View File

@ -7,7 +7,7 @@ import (
)
// Обработчик главной страницы
func PostPageHandler(a *models.App) http.HandlerFunc {
func PostPageHandler() http.HandlerFunc {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
var err error
@ -19,7 +19,7 @@ func PostPageHandler(a *models.App) http.HandlerFunc {
post := posts[models_pages.PostLink(r.URL.Path)]
pageData, err = models_pages.RenderPostPage(a.Templates, a.Version, post.Data)
pageData, err = models_pages.RenderPostPage(models.App.Templates, models.App.Version, post.Data)
if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
return

View File

@ -7,14 +7,14 @@ import (
)
// Обработчик главной страницы
func PostsPageHandler(a *models.App) http.HandlerFunc {
func PostsPageHandler() http.HandlerFunc {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
var err error
// Страничка рендерится только если ее нет в кэше
pageData, ok := models.PagesCache.Get(models_pages.PostsPageTmplName)
if !ok {
pageData, err = models_pages.RenderPostsPage(a.Templates, a.Version)
pageData, err = models_pages.RenderPostsPage(models.App.Templates, models.App.Version)
if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
return

View File

@ -2,7 +2,6 @@ package models
import (
"html/template"
"log"
"os"
"path/filepath"
"strings"
@ -10,28 +9,29 @@ import (
)
// App хранит шаблоны и время запуска
type App struct {
type app struct {
Templates *template.Template // Шаблоны страниц
Version int64 // Время запуска
}
// Инициализирует приложение
func AppInit() (*App, error) {
var (
App = &app{}
)
a := &App{
Version: time.Now().Unix(),
}
// Инициализирует приложение
func InitApp() error {
App.Version = time.Now().Unix()
// Загрузка шаблонов
if err := a.loadTemplates(Cfg.TemplatesDir, Cfg.TemplatesExt); err != nil {
log.Fatal(err)
if err := App.loadTemplates(Cfg.TemplatesDir, Cfg.TemplatesExt); err != nil {
return err
}
return a, nil
return nil
}
// Загрузка шаблонов
func (a *App) loadTemplates(templatesPath string, ext string) error {
func (a *app) loadTemplates(templatesPath string, ext string) error {
tmpls := template.New("")
err := filepath.Walk(templatesPath, func(path string, f os.FileInfo, err error) error {

View File

@ -2,7 +2,6 @@ package models
import (
"encoding/json"
"log"
"os"
)
@ -20,16 +19,10 @@ type config struct {
}
var (
Cfg = config{}
Cfg = &config{}
)
func init() {
if err := Cfg.load("config.json"); err != nil {
log.Fatalf("%v", err)
}
}
func (c *config) load(configPath string) error {
func (c *config) Load(configPath string) error {
configFile, err := os.ReadFile(configPath)
if err != nil {
return err

View File

@ -5,8 +5,6 @@ import (
"fmt"
"html/template"
"io"
"log"
"main/mvc/models"
"main/tools"
"os"
"path/filepath"
@ -25,17 +23,11 @@ var (
allPosts = posts{}
)
func init() {
if err := loadPosts(models.Cfg.PostsDir); err != nil {
log.Fatalf("%v", err)
}
}
func GetPosts() posts {
return allPosts
}
func loadPosts(dir string) error {
func LoadPosts(dir string) error {
err := filepath.Walk(dir, func(path string, f os.FileInfo, err error) error {
if err != nil {
return err

View File

@ -1,2 +1,2 @@
# Это тестовый пост
Этот пост был написан в файле формата .md
[Этот](/test/) пост был *написан* в файле **формата** .md