✨ Detect language in controller layer
This commit is contained in:
		@@ -49,6 +49,7 @@ func createArticle(c *fiber.Ctx) error {
 | 
			
		||||
	item := models.Post{
 | 
			
		||||
		Type:           models.PostTypeArticle,
 | 
			
		||||
		Body:           bodyMapping,
 | 
			
		||||
		Language:       services.DetectLanguage(data.Content),
 | 
			
		||||
		Tags:           data.Tags,
 | 
			
		||||
		Categories:     data.Categories,
 | 
			
		||||
		IsDraft:        data.IsDraft,
 | 
			
		||||
@@ -117,6 +118,7 @@ func editArticle(c *fiber.Ctx) error {
 | 
			
		||||
	_ = jsoniter.Unmarshal(rawBody, &bodyMapping)
 | 
			
		||||
 | 
			
		||||
	item.Body = bodyMapping
 | 
			
		||||
	item.Language = services.DetectLanguage(data.Content)
 | 
			
		||||
	item.Tags = data.Tags
 | 
			
		||||
	item.Categories = data.Categories
 | 
			
		||||
	item.IsDraft = data.IsDraft
 | 
			
		||||
 
 | 
			
		||||
@@ -51,6 +51,7 @@ func createStory(c *fiber.Ctx) error {
 | 
			
		||||
	item := models.Post{
 | 
			
		||||
		Type:           models.PostTypeStory,
 | 
			
		||||
		Body:           bodyMapping,
 | 
			
		||||
		Language:       services.DetectLanguage(data.Content),
 | 
			
		||||
		Tags:           data.Tags,
 | 
			
		||||
		Categories:     data.Categories,
 | 
			
		||||
		PublishedAt:    data.PublishedAt,
 | 
			
		||||
@@ -137,6 +138,7 @@ func editStory(c *fiber.Ctx) error {
 | 
			
		||||
	_ = jsoniter.Unmarshal(rawBody, &bodyMapping)
 | 
			
		||||
 | 
			
		||||
	item.Body = bodyMapping
 | 
			
		||||
	item.Language = services.DetectLanguage(data.Content)
 | 
			
		||||
	item.Tags = data.Tags
 | 
			
		||||
	item.Categories = data.Categories
 | 
			
		||||
	item.PublishedAt = data.PublishedAt
 | 
			
		||||
 
 | 
			
		||||
@@ -5,14 +5,12 @@ import (
 | 
			
		||||
	"strings"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
func DetectLanguage(content *string) string {
 | 
			
		||||
	if content != nil {
 | 
			
		||||
		detector := lingua.NewLanguageDetectorBuilder().
 | 
			
		||||
			FromLanguages(lingua.AllLanguages()...).
 | 
			
		||||
			Build()
 | 
			
		||||
		if lang, ok := detector.DetectLanguageOf(*content); ok {
 | 
			
		||||
			return strings.ToLower(lang.String())
 | 
			
		||||
		}
 | 
			
		||||
func DetectLanguage(content string) string {
 | 
			
		||||
	detector := lingua.NewLanguageDetectorBuilder().
 | 
			
		||||
		FromLanguages(lingua.AllLanguages()...).
 | 
			
		||||
		Build()
 | 
			
		||||
	if lang, ok := detector.DetectLanguageOf(content); ok {
 | 
			
		||||
		return strings.ToLower(lang.String())
 | 
			
		||||
	}
 | 
			
		||||
	return "unknown"
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -218,6 +218,10 @@ func EnsurePostCategoriesAndTags(item models.Post) (models.Post, error) {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func NewPost(user models.Account, item models.Post) (models.Post, error) {
 | 
			
		||||
	if !item.IsDraft && item.PublishedAt == nil {
 | 
			
		||||
		item.PublishedAt = lo.ToPtr(time.Now())
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	item, err := EnsurePostCategoriesAndTags(item)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return item, err
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user