Skip to content
Extraits de code Groupes Projets
Valider 2decb873 rédigé par Mohamed Lemine BAILLAHI's avatar Mohamed Lemine BAILLAHI
Parcourir les fichiers

Merge branch 'feauture/IA-439' into 'develop'

change changlog

Closes IA-439

See merge request !35
parents 42aefbe9 5ab0a4b7
Branches
Étiquettes
1 requête de fusion!35change changlog
Pipeline #19898 en échec avec les étapes
in 14 minutes et 21 secondes
Affichage de
avec 289 ajouts et 26 suppressions
## [0.0.30-RELEASE]
### Added
- New features that have been added.
### Changed
- Changes in existing functionality.
### Deprecated
- Soon-to-be removed features.
### Removed
- Features that have been removed.
### Fixed
- Any bug fixes.
### Security
- Any security improvements.
-add entites assitant devoir
## [0.0.29-RELEASE]
### Added
- Add gestion-modeles-service entities.
......
// src/main/java/com/marketingconfort/brainboost_common/assistant_devoir/enums/FilterSeverity.java
package com.marketingconfort.brainboost_common.assistant_devoir.enums;
import lombok.Getter;
/**
* Niveaux de sévérité pour le filtrage de contenu
*/
@Getter
public enum FilterSeverity {
/**
* Faible - Simple avertissement, contenu autorisé
*/
LOW("Low - Warning only", "Attention au vocabulaire"),
/**
* Moyen - Demande confirmation à l'utilisateur
*/
MEDIUM("Medium - Require confirmation", "Peux-tu reformuler ?"),
/**
* Élevé - Bloque le contenu, message éducatif
*/
HIGH("High - Block content", "Contenu non autorisé"),
/**
* Critique - Bloque et signale, alerte système
*/
CRITICAL("Critical - Block and report", "Contenu strictement interdit");
private final String displayName;
private final String defaultMessage;
FilterSeverity(String displayName, String defaultMessage) {
this.displayName = displayName;
this.defaultMessage = defaultMessage;
}
/**
* Obtenir un message adapté au niveau éducatif
*/
public String getEducationalMessage(String educationalLevel) {
if (educationalLevel == null) educationalLevel = "CP";
return switch (educationalLevel.toUpperCase()) {
case "CP", "CE1" -> switch (this) {
case LOW -> "Fais attention aux mots que tu utilises !";
case MEDIUM -> "Peux-tu dire ça autrement ?";
case HIGH -> "Je ne peux pas t'aider avec ça. Pose-moi une autre question !";
case CRITICAL -> "Ces mots ne sont pas autorisés. Parlons de tes devoirs !";
};
case "CE2", "CM1" -> switch (this) {
case LOW -> "Attention au vocabulaire utilisé.";
case MEDIUM -> "Peux-tu reformuler ta question ?";
case HIGH -> "Je ne peux pas traiter ce type de contenu.";
case CRITICAL -> "Contenu non autorisé. Parlons plutôt de tes études !";
};
case "CM2", "SIXIEME", "CINQUIEME", "QUATRIEME", "TROISIEME" -> switch (this) {
case LOW -> "Merci de faire attention au vocabulaire.";
case MEDIUM -> "Pourrais-tu reformuler de manière plus appropriée ?";
case HIGH -> "Je ne peux pas t'aider avec ce type de contenu.";
case CRITICAL -> "Ce contenu n'est pas autorisé. Concentrons-nous sur tes devoirs.";
};
default -> defaultMessage;
};
}
/**
* Vérifie si cette sévérité autorise le contenu
*/
public boolean allowsContent() {
return this == LOW;
}
/**
* Vérifie si cette sévérité nécessite une confirmation
*/
public boolean requiresConfirmation() {
return this == MEDIUM;
}
/**
* Vérifie si cette sévérité bloque le contenu
*/
public boolean blocksContent() {
return this == HIGH || this == CRITICAL;
}
/**
* Vérifie si cette sévérité nécessite un signalement
*/
public boolean requiresReporting() {
return this == CRITICAL;
}
}
\ No newline at end of file
package com.marketingconfort.brainboost_common.assistant_devoir.enums;
import lombok.Getter;
/**
* Types de filtres de contenu
*/
@Getter
public enum FilterType {
/**
* Filtre global - appliqué à tous les utilisateurs et assistants
*/
GLOBAL("Global filter", "Appliqué à tous"),
/**
* Filtre spécifique à un type d'assistant
*/
ASSISTANT_SPECIFIC("Assistant specific", "Spécifique à un assistant"),
/**
* Filtre spécifique à un utilisateur
*/
USER_SPECIFIC("User specific", "Spécifique à un utilisateur"),
/**
* Filtre basé sur le niveau éducatif
*/
EDUCATIONAL_LEVEL("Educational level based", "Basé sur le niveau scolaire"),
/**
* Filtre spécifique à une matière
*/
SUBJECT_SPECIFIC("Subject specific", "Spécifique à une matière"),
/**
* Filtre de contenu éducatif
*/
EDUCATIONAL_CONTENT("Educational content", "Contenu éducatif"),
/**
* Filtre de sécurité (mots dangereux/inappropriés)
*/
SAFETY("Safety filter", "Filtre de sécurité"),
/**
* Filtre parental (restrictions demandées par les parents)
*/
PARENTAL("Parental control", "Contrôle parental");
private final String displayName;
private final String description;
FilterType(String displayName, String description) {
this.displayName = displayName;
this.description = description;
}
/**
* Vérifier si ce type de filtre s'applique globalement
*/
public boolean isGlobal() {
return this == GLOBAL || this == SAFETY || this == EDUCATIONAL_CONTENT;
}
/**
* Vérifier si ce type de filtre est spécifique à un utilisateur
*/
public boolean isUserSpecific() {
return this == USER_SPECIFIC || this == PARENTAL;
}
/**
* Vérifier si ce type de filtre est spécifique à un assistant
*/
public boolean isAssistantSpecific() {
return this == ASSISTANT_SPECIFIC || this == EDUCATIONAL_LEVEL || this == SUBJECT_SPECIFIC;
}
/**
* Obtenir la priorité du filtre (plus haut = plus prioritaire)
*/
public int getPriority() {
return switch (this) {
case SAFETY -> 100; // Priorité maximale
case GLOBAL -> 90;
case PARENTAL -> 80;
case USER_SPECIFIC -> 70;
case EDUCATIONAL_LEVEL -> 60;
case ASSISTANT_SPECIFIC -> 50;
case SUBJECT_SPECIFIC -> 40;
case EDUCATIONAL_CONTENT -> 30;
};
}
/**
* Obtenir un message d'explication pour ce type de filtre
*/
public String getExplanationMessage() {
return switch (this) {
case GLOBAL -> "Ce filtre s'applique à tous les utilisateurs et assistants.";
case ASSISTANT_SPECIFIC -> "Ce filtre s'applique spécifiquement à cet assistant.";
case USER_SPECIFIC -> "Ce filtre s'applique spécifiquement à cet utilisateur.";
case EDUCATIONAL_LEVEL -> "Ce filtre s'applique selon le niveau scolaire.";
case SUBJECT_SPECIFIC -> "Ce filtre s'applique à cette matière spécifique.";
case EDUCATIONAL_CONTENT -> "Ce filtre concerne le contenu pédagogique.";
case SAFETY -> "Ce filtre protège contre les contenus dangereux.";
case PARENTAL -> "Ce filtre a été configuré par les parents.";
};
}
}
\ No newline at end of file
......@@ -24,12 +24,22 @@ public class ChildHomeworkAssistant extends BaseEntity {
@Column(name = "status", nullable = false)
private AssistantStatus status = AssistantStatus.ACTIVE;
@Column(name = "description", columnDefinition = "TEXT")
private String description;
@Column(name = "forbidden_words", columnDefinition = "TEXT")
private String forbiddenWords; // Format: "mot1,mot2,mot3"
// ✅ AJOUTER CETTE LIGNE
@Column(name = "forbidden_response_words", columnDefinition = "TEXT")
private String forbiddenResponseWords; // Mots que l'assistant ne dira jamais dans ses réponses
@Enumerated(EnumType.STRING)
@Column(name = "education_level", nullable = false)
private EducationLevel educationLevel;
@Column(name = "isActive ", nullable = false)
private Boolean isActive = true;
@Column(name = "isActive", nullable = false)
private Boolean isActive = true;
@ElementCollection
@CollectionTable(
......
......@@ -23,7 +23,11 @@ public class MediaConfig extends BaseEntity {
@Column(name = "ocr_enabled", nullable = false)
private Boolean ocrEnabled = false;
@Column(name = "audio_response_enabled", nullable = false)
private Boolean audioResponseEnabled = false;
@Column(name = "pdf_enabled", nullable = false)
private Boolean pdfEnabled = false;
@Column(name = "voice_transcription_enabled", nullable = false)
private Boolean voiceTranscriptionEnabled = false;
......
package com.marketingconfort.brainboost_common.assistant_devoir.models;
import com.marketingconfort.brainboost_common.assistantmanagement.models.BaseEntity;
import jakarta.persistence.*;
import lombok.*;
@Entity
@Table(name = "user_content_restriction",
uniqueConstraints = {
@UniqueConstraint(name = "unique_user_assistant",
columnNames = {"user_id", "assistant_id"})
},
indexes = {
@Index(name = "idx_user_restriction", columnList = "user_id"),
@Index(name = "idx_assistant_restriction", columnList = "assistant_id"),
@Index(name = "idx_active_restrictions", columnList = "is_active")
})
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
public class UserContentRestriction extends BaseEntity {
@Column(name = "user_id", nullable = false)
private Long userId;
@Column(name = "assistant_id", nullable = false)
private Long assistantId;
@Column(name = "forbidden_input_words", columnDefinition = "TEXT")
private String forbiddenInputWords; // "pokemon,jeux,dessins animés"
@Column(name = "restriction_reason")
private String restrictionReason; // "Demande des parents"
@Column(name = "is_active", nullable = false)
private Boolean isActive = true;
}
\ No newline at end of file
// ============================================================================
// SOLUTION 1: Ajouter @Id dans ConfigOCR.java
// ============================================================================
package com.marketingconfort.brainboost_common.traitement_multimedia.models.docs;
import jakarta.persistence.*;
......@@ -8,7 +11,10 @@ import lombok.*;
@Setter
@NoArgsConstructor
@AllArgsConstructor
public class ConfigOCR {
public class ConfigOCR {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@ManyToOne
@JoinColumn(name = "image_processing_id")
......@@ -21,4 +27,5 @@ public class ConfigOCR {
private Boolean detectFormulas;
private Integer detailLevel;
private Boolean academicOptimization;
}
\ No newline at end of file
}
......@@ -9,7 +9,9 @@ import lombok.*;
@NoArgsConstructor
@AllArgsConstructor
public class ExtractedTable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@ManyToOne
@JoinColumn(name = "ocr_result_id")
private OCRResult ocrResult;
......
......@@ -9,7 +9,9 @@ import lombok.*;
@NoArgsConstructor
@AllArgsConstructor
public class FormuleMathematique {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@ManyToOne
@JoinColumn(name = "ocr_result_id")
private OCRResult ocrResult;
......
......@@ -8,7 +8,9 @@ import lombok.*;
@NoArgsConstructor
@AllArgsConstructor
public class ImageDocument {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(name = "user_id")
private Long userId;
......
......@@ -9,7 +9,9 @@ import lombok.*;
@NoArgsConstructor
@AllArgsConstructor
public class ImageProcessing {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private Long creatorId;
private Long lastModifierId;
private String supportedFormats;
......
......@@ -9,7 +9,9 @@ import lombok.*;
@NoArgsConstructor
@AllArgsConstructor
public class Metadata {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@ManyToOne
@JoinColumn(name = "image_document_id")
private ImageDocument imageDocument;
......
......@@ -9,7 +9,9 @@ import lombok.*;
@NoArgsConstructor
@AllArgsConstructor
public class OCRResult {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@ManyToOne
@JoinColumn(name = "image_document_id")
private ImageDocument imageDocument;
......
0% ou .
You are about to add 0 people to the discussion. Proceed with caution.
Terminez d'abord l'édition de ce message.
Veuillez vous inscrire ou vous pour commenter