feat: initial commit

This commit is contained in:
2026-04-16 19:39:02 +02:00
commit 50d1686b1e
44 changed files with 2089 additions and 0 deletions

View File

@@ -0,0 +1,27 @@
package interfaces
import (
"encoding/json"
"net/http"
"time"
)
type HealthHandler struct{}
func NewHealthHandler() *HealthHandler {
return &HealthHandler{}
}
type healthResponse struct {
Status string `json:"status"`
Timestamp time.Time `json:"timestamp"`
}
func (h *HealthHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Content-Type", "application/json")
w.WriteHeader(http.StatusOK)
_ = json.NewEncoder(w).Encode(healthResponse{
Status: "ok",
Timestamp: time.Now().UTC(),
})
}

View File

@@ -0,0 +1,74 @@
package interfaces
import (
"context"
"log/slog"
"time"
tgbotapi "github.com/go-telegram-bot-api/telegram-bot-api/v5"
"github.com/paramah/gw_telegram/internal/application/dto"
"github.com/paramah/gw_telegram/internal/application/usecase"
)
type TelegramHandler struct {
textUC *usecase.HandleTextMessage
voiceUC *usecase.HandleVoiceMessage
logger *slog.Logger
}
func NewTelegramHandler(
textUC *usecase.HandleTextMessage,
voiceUC *usecase.HandleVoiceMessage,
logger *slog.Logger,
) *TelegramHandler {
return &TelegramHandler{textUC: textUC, voiceUC: voiceUC, logger: logger}
}
func (h *TelegramHandler) Handle(ctx context.Context, update tgbotapi.Update) {
defer func() {
if r := recover(); r != nil {
h.logger.ErrorContext(ctx, "panic in update handler", "panic", r)
}
}()
if update.Message == nil {
return
}
msg := update.Message
switch {
case msg.Voice != nil:
in := dto.IncomingMessageDTO{
MessageID: int64(msg.MessageID),
ChatID: msg.Chat.ID,
UserID: msg.From.ID,
Username: msg.From.UserName,
FirstName: msg.From.FirstName,
LastName: msg.From.LastName,
VoiceFileID: msg.Voice.FileID,
IsVoice: true,
Timestamp: time.Unix(int64(msg.Date), 0),
Language: msg.From.LanguageCode,
}
if err := h.voiceUC.Execute(ctx, in); err != nil {
h.logger.ErrorContext(ctx, "voice handler error", "error", err, "user_id", msg.From.ID)
}
case msg.Text != "":
in := dto.IncomingMessageDTO{
MessageID: int64(msg.MessageID),
ChatID: msg.Chat.ID,
UserID: msg.From.ID,
Username: msg.From.UserName,
FirstName: msg.From.FirstName,
LastName: msg.From.LastName,
Text: msg.Text,
Timestamp: time.Unix(int64(msg.Date), 0),
Language: msg.From.LanguageCode,
}
if err := h.textUC.Execute(ctx, in); err != nil {
h.logger.ErrorContext(ctx, "text handler error", "error", err, "user_id", msg.From.ID)
}
}
}