Skip to content

Commit

Permalink
Merge pull request #32 from mffonseca/feature/update-service-repos
Browse files Browse the repository at this point in the history
Refatoração estrutural para implementação de repositories e implementação de novo módulo events
  • Loading branch information
mffonseca authored Jul 27, 2024
2 parents eaebc09 + ce92b0f commit f2b2797
Show file tree
Hide file tree
Showing 17 changed files with 491 additions and 132 deletions.
62 changes: 62 additions & 0 deletions .github/pull_request_template.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
## Descrição

Este pull request introduz melhorias no template HTML da página de erro. A principal melhoria é o aumento do tamanho da fonte do código de erro e da mensagem para torná-los mais destacados e fáceis de ler.

## Mudanças Realizadas

1. **Aumento do Tamanho da Fonte**:
- Adicionadas estilos CSS personalizados para aumentar o tamanho da fonte do código de erro e da mensagem.
- Aplicadas classes utilitárias do Tailwind CSS para garantir que o texto esteja centralizado.

### Arquivos Modificados

- `templates/web/error.html`: Estrutura HTML atualizada e adição de estilos personalizados.

### Mudanças Detalhadas

- **Tamanho da Fonte do Código de Erro**:
- Adicionada a classe CSS `.error-code` com `font-size: 4rem;` para aumentar o tamanho da fonte do código de erro.
- **Tamanho da Fonte da Mensagem de Erro**:
- Adicionada a classe CSS `.error-message` com `font-size: 1.5rem;` para aumentar o tamanho da fonte da mensagem de erro.
- **Alinhamento Central**:
- Aplicada a classe `text-center` do Tailwind CSS para centralizar o texto dentro do contêiner.

## Antes e Depois

### Antes

![Screenshot Antes](link_para_screenshot_antes)

### Depois

![Screenshot Depois](link_para_screenshot_depois)

## Motivação e Contexto

O tamanho da fonte anterior para o código de erro e a mensagem era muito pequeno, dificultando para os usuários identificarem e entenderem rapidamente o erro. Aumentar o tamanho da fonte melhora a legibilidade e a experiência do usuário.

## Como Isso Foi Testado?

- Testado manualmente a página de erro para garantir que os novos tamanhos de fonte sejam aplicados corretamente e o texto permaneça centralizado.

## Issue Relacionada

- [Issue #123](link_para_issue_relacionada)

## Tipos de Mudanças

- [ ] Correção de bug (mudança que não quebra a compatibilidade e corrige um problema)
- [x] Nova funcionalidade (mudança que não quebra a compatibilidade e adiciona uma funcionalidade)
- [ ] Mudança que quebra a compatibilidade (correção ou funcionalidade que causa uma mudança em funcionalidades existentes)

## Checklist

- [x] Meu código segue o estilo de código deste projeto.
- [x] Minha mudança requer uma mudança na documentação.
- [x] Eu atualizei a documentação conforme necessário.
- [ ] Eu adicionei testes para cobrir minhas mudanças.
- [x] Todos os novos e antigos testes passaram.

## Notas Adicionais

- Qualquer informação ou contexto adicional que os revisores possam precisar saber.
45 changes: 35 additions & 10 deletions backend/cmd/api/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,35 +2,60 @@ package main

import (
"faladev/config"
"faladev/internal/models"
"faladev/internal/repository"
"faladev/internal/services"
"faladev/pkg/http"
"fmt"
"os"

log "github.com/sirupsen/logrus"

"faladev/internal/database"

"golang.org/x/oauth2"
)

func main() {

oauthConfig := config.SetupOAuthConfig()
log.SetOutput(os.Stdout)
log.SetLevel(log.DebugLevel)

token, err := models.LoadToken()
appConfig, err := config.LoadConfig()

if err != nil {
log.Fatal(err)
log.Fatalf("Failed to load configuration: %v", err)
}

appOAuth2Config := appConfig.OAuth2.Config

db, err := database.InitDB(appConfig.DatabaseURL)

if err != nil {
log.Fatalf("Failed to initialize database: %v", err)
}

tokenRepo := repository.NewTokenRepository(db)
studentRepo := repository.NewStudentRepository(db)
eventRepo := repository.NewEventRepository(db)

tokenService := services.NewTokenService(tokenRepo)
studentService := services.NewStudentService(studentRepo)
eventService := services.NewEventService(eventRepo)

token, err := tokenService.GetToken()

if err != nil {
log.Fatalf("Failed to load token: %v", err)
}

if token == nil {
log.Println("Token not found, redirecting to authentication...")
fmt.Println("Please visit the following link to authorize your Google account: ", oauthConfig.AuthCodeURL("state-token", oauth2.AccessTypeOffline))
fmt.Println("Please visit the following link to authorize your Google account: ", appOAuth2Config.AuthCodeURL("state-token", oauth2.AccessTypeOffline))
}

appAuthConfig := config.AuthConfig{
Config: oauthConfig,
Token: token,
}
calendarService := services.NewGoogleCalendarService()
emailService := services.NewGmailService(appOAuth2Config, token)

http.StartServer(appAuthConfig)
http.StartServer(appOAuth2Config, *studentService, calendarService, emailService, *tokenService, *eventService)

}
25 changes: 23 additions & 2 deletions backend/cmd/migrate/main.go
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package main

import (
"faladev/config"
"faladev/internal/database"
"faladev/internal/models"
"fmt"
Expand All @@ -11,7 +12,17 @@ func main() {

fmt.Println("Starting migration...")

db := database.GetDB()
appConfig, err := config.LoadConfig()

if err != nil {
log.Fatalf("Failed to load configuration: %v", err)
}

db, err := database.InitDB(appConfig.DatabaseURL)

if err != nil {
log.Fatalf("Failed to initialize database: %v", err)
}

db.Exec("CREATE EXTENSION IF NOT EXISTS \"uuid-ossp\";")

Expand All @@ -24,8 +35,18 @@ func main() {
errToken := db.AutoMigrate(&models.Token{})

if errToken != nil {
log.Fatalf("Failed to migrate students: %v", errToken)
log.Fatalf("Failed to migrate tokens: %v", errToken)
}

errEvent := db.AutoMigrate(&models.Event{})

if errEvent != nil {
log.Fatalf("Failed to migrate events: %v", errEvent)
}

fmt.Println("Migration completed successfully!")

database.Seed(db)

fmt.Println("Seed completed successfully!")
}
44 changes: 29 additions & 15 deletions backend/config/config.go
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package config

import (
"errors"
"log"
"os"

Expand All @@ -11,29 +12,25 @@ import (
"google.golang.org/api/gmail/v1"
)

type AuthConfig struct {
type OAuth2Config struct {
Config *oauth2.Config
Token *oauth2.Token
}

func GetEventGoogleMeet() string {

meetEvent := os.Getenv("GOOGLE_MEET_EVENT")
type Config struct {
DatabaseURL string
OAuth2 OAuth2Config
}

if meetEvent == "" {
log.Fatal("Please set the GOOGLE_MEET_EVENT environment variable")
func getDatabaseURL() string {
databaseURL := os.Getenv("DATABASE_URL")
if databaseURL == "" {
log.Fatal("Please set the DATABASE_URL environment variable")
}

return meetEvent
return databaseURL
}

func SetupOAuthConfig() *oauth2.Config {

err := godotenv.Load()

if err != nil {
log.Printf("Warning: No .env file found, reading from environment variables. Error: %v", err)
}
func getOAuthConfig() *oauth2.Config {

clientID := os.Getenv("GOOGLE_CLIENT_ID")
clientSecret := os.Getenv("GOOGLE_CLIENT_SECRET")
Expand All @@ -51,3 +48,20 @@ func SetupOAuthConfig() *oauth2.Config {
Endpoint: google.Endpoint,
}
}

func LoadConfig() (*Config, error) {

err := godotenv.Load()

if err != nil {
return nil, errors.New("failed to load environment variables")
}

oauthConfig := getOAuthConfig()
databaseURL := getDatabaseURL()

return &Config{
DatabaseURL: databaseURL,
OAuth2: OAuth2Config{Config: oauthConfig},
}, nil
}
28 changes: 12 additions & 16 deletions backend/internal/database/database.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@ package database

import (
"log"
"os"
"sync"
"time"

Expand All @@ -17,35 +16,32 @@ var (
once sync.Once
)

func GetDB() *gorm.DB {
func InitDB(databaseURL string) (*gorm.DB, error) {

once.Do(func() {

databaseURL := os.Getenv("DATABASE_URL")
var err error

if databaseURL == "" {
log.Fatal("DATABASE_URL environment variable not set")
}

var err error
once.Do(func() {

db, err = gorm.Open(postgres.Open(databaseURL), &gorm.Config{})

if err != nil {
panic("failed to connect to database")
log.Printf("failed to connect to database: %v", err)
return
}

sqlDB, err := db.DB()

if err != nil {
panic("failed to get database connection handle")
log.Printf("failed to get database connection handle: %v", err)
return
}

sqlDB.SetMaxIdleConns(20)
sqlDB.SetMaxOpenConns(200)
sqlDB.SetConnMaxLifetime(time.Hour)

})

return db
if err != nil {
return nil, err
}

return db, nil
}
44 changes: 44 additions & 0 deletions backend/internal/database/seed.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
package database

import (
"faladev/internal/models"
"log"
"time"

"gorm.io/gorm"
)

func Seed(db *gorm.DB) {
seedEvents(db)
}

func seedEvents(db *gorm.DB) {

var eventCount int64

db.Model(&models.Event{}).Count(&eventCount)

if eventCount == 0 {

log.Println("Inserting default event...")

defaultEvent := models.Event{
Name: "Mentoria (Carreira e Tecnologia)",
Description: "",
Location: "https://meet.google.com/eam-bqde-mgd",
StartDate: time.Now().Add(24 * time.Hour),
EndDate: time.Now().Add(26 * time.Hour),
StartTime: time.Now().Add(24 * time.Hour),
EndTime: time.Now().Add(26 * time.Hour),
Organizer: "",
Email: "",
Phone: "",
}

if err := db.Create(&defaultEvent).Error; err != nil {
log.Fatalf("Failed to insert default event: %v", err)
}

log.Println("Default event inserted successfully!")
}
}
21 changes: 21 additions & 0 deletions backend/internal/models/events.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
package models

import (
"time"

"gorm.io/gorm"
)

type Event struct {
gorm.Model
Name string `json:"name"`
Description string `json:"description"`
Location string `json:"location"`
StartDate time.Time `json:"start_date"`
EndDate time.Time `json:"end_date"`
StartTime time.Time `json:"start_time"`
EndTime time.Time `json:"end_time"`
Organizer string `json:"organizer"`
Email string `json:"email"`
Phone string `json:"phone"`
}
Loading

0 comments on commit f2b2797

Please sign in to comment.