feat: initial commit
This commit is contained in:
27
internal/interfaces/health_handler.go
Normal file
27
internal/interfaces/health_handler.go
Normal 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(),
|
||||
})
|
||||
}
|
||||
74
internal/interfaces/telegram_handler.go
Normal file
74
internal/interfaces/telegram_handler.go
Normal 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)
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user