Разработка Java-проекта с Jmix AI Assistant. ai.. ai. assistant.. ai. assistant. Java.. ai. assistant. Java. искусственный интеллект.. ai. assistant. Java. искусственный интеллект. кодогенерация.. ai. assistant. Java. искусственный интеллект. кодогенерация. Программирование.

Эта заметка инспирирована статей на Хабре Разработка Java-проекта с ChatGPT-4: от идеи до реализации [1]. После ее прочтения автор начал экспериментировать в разработке ПО с различными AI ассистентами.

Увидев статью блога Jmix AI Assistant — ваш помощник в освоении Jmix [2], решил реализовать с помощью Jmix AI Assistant приложение аналогичное приведенному в статье [1].

Главное отличие от указанной статьи в том, что вся разработка будет вестись с помощью одного инструмента Jmix AI Assistant без использования сторонних генераторов кода.

Первая фаза эксперимента: анализ предметной области и генерация UML

Как и в статье [1] мы будем создавать с нуля образовательную платформу по типу условных Udemy или Coursera.

«Я хочу создать систему Образовательная платформа: создание системы для проведения онлайн курсов, тестирования и отслеживания прогресса студентов.

Укажи use cases для данной системы».

И получаем такой ответ:

Для системы образовательной платформы, предназначенной для проведения онлайн-курсов, тестирования и отслеживания прогресса студентов, можно выделить следующие основные сценарии использования (use cases):

Основные Use Cases

  1. Регистрация пользователя

    • Акторы: Студент, Преподаватель, Администратор

    • Описание: Пользователь может зарегистрироваться на платформе, предоставив необходимые данные, такие как имя, адрес электронной почты и пароль.

  2. Аутентификация пользователя

    • Акторы: Студент, Преподаватель, Администратор

    • Описание: Пользователь может войти в систему, используя свои учетные данные.

  3. Просмотр доступных курсов

    • Акторы: Студент

    • Описание: Студент может просматривать список доступных курсов, включая описание, преподавателя и расписание.

  4. Запись на курс

    • Акторы: Студент

    • Описание: Студент может записаться на выбранный курс.

  5. Создание и управление курсами

    • Акторы: Преподаватель

    • Описание: Преподаватель может создавать новые курсы, добавлять материалы, устанавливать расписание и управлять содержимым курса.

  6. Проведение онлайн-занятий

    • Акторы: Преподаватель, Студент

    • Описание: Преподаватель может проводить онлайн-занятия, а студенты могут участвовать в них.

  7. Создание и проведение тестов

    • Акторы: Преподаватель

    • Описание: Преподаватель может создавать тесты и назначать их студентам.

  8. Прохождение тестов

    • Акторы: Студент

    • Описание: Студент может проходить тесты, назначенные в рамках курса.

  9. Отслеживание прогресса

    • Акторы: Студент, Преподаватель

    • Описание: Студент может отслеживать свой прогресс по курсу, а преподаватель может видеть прогресс всех студентов.

  10. Управление пользователями

    • Акторы: Администратор

    • Описание: Администратор может управлять учетными записями пользователей, включая их создание, изменение и удаление.

  11. Управление контентом

    • Акторы: Преподаватель, Администратор

    • Описание: Управление учебными материалами, включая загрузку, обновление и удаление контента.

  12. Обратная связь и оценка

    • Акторы: Студент, Преподаватель

    • Описание: Студенты могут оставлять отзывы о курсах, а преподаватели могут оценивать работу студентов.

Дополнительные Use Cases

  • Уведомления и напоминания

    • Акторы: Студент, Преподаватель

    • Описание: Система отправляет уведомления о предстоящих занятиях, дедлайнах и других важных событиях.

  • Форумы и обсуждения

    • Акторы: Студент, Преподаватель

    • Описание: Возможность участия в форумах и обсуждениях, связанных с курсами.

Эти сценарии использования помогут в проектировании и разработке системы, обеспечивая основные функции, необходимые для эффективного обучения и управления образовательным процессом.

Описанные в ответе сценарии звучат логично, попробуем визуализировать эти требования.

Пишем следующий запрос для Jmix AI Assistant:

«Разработай UML-диаграмму в формате PlantUML для этих use cases.

Уточняющий запрос: могу ли я не использовать псевдонимы UC1, UC2, и т. д.? И разместить эту диаграмму вертикально, чтобы teacher был под student?»

Скрытый текст

Для создания UML-диаграммы use case в формате PlantUML, мы можем использовать текстовый формат, который будет описывать взаимодействие между актерами (студент, преподаватель, администратор) и системой. Мы можем не использовать псевдонимы UC1, UC2 и т. д., и разместить диаграмму вертикально, чтобы актёры были расположены один под другим.

Вот пример PlantUML кода для вашей системы образовательной платформы:

@startuml

left to right direction

actor Student
actor Teacher
actor Administrator

usecase "Регистрация пользователя" as UC_Register
usecase "Аутентификация пользователя" as UC_Authenticate
usecase "Просмотр доступных курсов" as UC_ViewCourses
usecase "Запись на курс" as UC_Enroll
usecase "Создание и управление курсами" as UC_ManageCourses
usecase "Проведение онлайн-занятий" as UC_ConductClasses
usecase "Создание и проведение тестов" as UC_CreateTests
usecase "Прохождение тестов" as UC_TakeTests
usecase "Отслеживание прогресса" as UC_TrackProgress
usecase "Управление пользователями" as UC_ManageUsers
usecase "Управление контентом" as UC_ManageContent
usecase "Обратная связь и оценка" as UC_Feedback
usecase "Уведомления и напоминания" as UC_Notifications
usecase "Форумы и обсуждения" as UC_Forums

Student --> UC_Register
Student --> UC_Authenticate
Student --> UC_ViewCourses
Student --> UC_Enroll
Student --> UC_TakeTests
Student --> UC_TrackProgress
Student --> UC_Feedback
Student --> UC_Notifications
Student --> UC_Forums

Teacher --> UC_Authenticate
Teacher --> UC_ManageCourses
Teacher --> UC_ConductClasses
Teacher --> UC_CreateTests
Teacher --> UC_TrackProgress
Teacher --> UC_ManageContent
Teacher --> UC_Feedback
Teacher --> UC_Notifications
Teacher --> UC_Forums

Administrator --> UC_Authenticate
Administrator --> UC_ManageUsers
Administrator --> UC_ManageContent

@enduml

Объяснение:

  • Актёры: Student, Teacher, и Admin представляют пользователей системы.

  • Сценарии использования: Каждый use case описывает функциональность, доступную для актёров.

  • Связи: Стрелки показывают, какие актёры могут выполнять какие сценарии использования.

Вертикальное расположение:

  • В PlantUML актёры по умолчанию располагаются горизонтально. Чтобы изменить это, можно использовать вертикальное расположение, как показано выше, где Teacher и Admin расположены под Student.

Эта диаграмма поможет визуализировать взаимодействие пользователей с системой и определить основные функциональные требования. Вы можете скопировать этот код в любой PlantUML-редактор, чтобы сгенерировать диаграмму.

Сгенерированный UML-скрипт был затем визуализирован с помощью опенсорсного инструмента PlantUML:

Разработка Java-проекта с Jmix AI Assistant - 1

На следующем шаге создаем доменную модель. Задаем такой запрос для Jmix AI Assistant:

«Разработай доменную модель для системы, описанной на use case диаграмме: <сюда подставляем UML-скрипт>».

Получаем доменную модель с ключевыми сущностями, связанными с образовательной платформой, такими как пользователи, курсы, уроки, материалы, тесты, задания и другие:

Скрытый текст

Чтобы разработать модель домена для системы образовательной платформы, описанной в диаграмме вариантов использования, нам необходимо определить ключевые сущности и их взаимосвязи. Модель домена будет представлять основные понятия и их взаимодействие в системе.

Модель домена в PlantUML

Ниже приведен код PlantUML для модели домена образовательной платформы:

@startuml

class User {
    +String username
    +String password
    +String email
    +register()
    +authenticate()
}

class Student {
    +enrollInCourse(Course)
    +takeTest(Test)
    +trackProgress()
    +giveFeedback(Course)
}

class Teacher {
    +createCourse()
    +manageCourse(Course)
    +conductClass(Course)
    +createTest(Course)
    +trackStudentProgress(Student)
    +manageContent(Content)
}

class Administrator {
    +manageUsers(User)
    +manageContent(Content)
}

class Course {
    +String title
    +String description
    +List<Content> contents
    +List<Student> enrolledStudents
    +addContent(Content)
    +removeContent(Content)
}

class Test {
    +String title
    +Date date
    +Course course
    +List<Question> questions
    +addQuestion(Question)
    +removeQuestion(Question)
}

class Content {
    +String title
    +String type
    +String data
}

class Question {
    +String text
    +List<String> options
    +String correctAnswer
}

class Notification {
    +String message
    +Date date
    +sendTo(User)
}

class Forum {
    +String topic
    +List<Post> posts
    +addPost(Post)
}

class Post {
    +String author
    +String content
    +Date date
}

User <|-- Student
User <|-- Teacher
User <|-- Administrator

Course "1" -- "*" Content
Course "1" -- "*" Student
Course "1" -- "*" Test
Test "1" -- "*" Question
Forum "1" -- "*" Post

@enduml

Объяснение:

  • Сущности:

    • User: базовый класс для всех пользователей с общими атрибутами и методами.

    • StudentTeacherAdministrator: специализированные классы, наследуемые от User, каждый с определенными методами.

    • Course: представляет курс с такими атрибутами, как название и описание, а также методы управления контентом и учащимися.

    • Test и Question: представляют тесты и вопросы к ним, связанные с курсами.

    • Content: представляет учебные материалы в рамках курса.

    • Notification: представляет сообщения, отправленные пользователям.

    • Forum и Post: представляют дискуссионные форумы и записи в них.

  • Отношения:

    • Наследование используется для определения StudentTeacher, и Administrator как специализированных типов User.

    • Ассоциации между Course и ContentStudent и Test используется для представления их отношений.

    • Test связан ассоциацией с Question для представления структуры теста.

Эта модель домена обеспечивает структурированное представление ключевых сущностей и их взаимодействий в системе образовательной платформы. Вы можете использовать эту модель в качестве основы для реализации логики бэкенда системы.

Визуализируем доменную модель с помощью того же инструмента:

Разработка Java-проекта с Jmix AI Assistant - 2

Созданная модель сыровата, поэтому для ее доработки даем такой запрос Jmix AI Assistant:

«Уточни поля для классов Teacher, Student, Administrator».

Обновленная доменная модель выглядит так:

Разработка Java-проекта с Jmix AI Assistant - 3

Теперь классы Teacher, Student и Administrator наследуются от базового класса User и имеют следующие дополнительные поля и связи, специфичные для каждой роли:

  • Student: Включает поля для отслеживания регистрации и прогресса.

  • Teacher: Включает поля для управления курсами и специализацией.

  • Administrator: Включает поля для управления ролями и разрешениями.

Продолжаем уточнять запрос:

«Переименуй Content в Module и добавь информацию по длительности для Material, Test и Assignment».

Получаем:

Разработка Java-проекта с Jmix AI Assistant - 4

Теперь класс Content переименован в Module, а для классов Material, Test и Assignment добавлено новое поле «duration» для отражения длительности материала, теста или задания. Эта длительность может быть измерена в минутах, часах или днях в зависимости от контекста и требований системы.

Вторая фаза эксперимента: использование Jmix AI Assistant для реализации доменной модели на Java

Главное отличие от статьи [1] заключается в том, что разработка кода будет вестись с помощью Jmix AI Assistant без использования сторонних генераторов кода.

Для реализации доменной модели на Java даем такой запрос Jmix AI Assistant:

Реализовать доменную модель на JMIX

Получаем ответ:

Чтобы реализовать доменную модель образовательной платформы в Jmix, вам нужно определить сущности, которые представляют основные компоненты вашей системы. Ниже приведено пошаговое руководство по созданию этих сущностей с помощью Jmix, основанное на информации, полученной из документации и форумов.

Скрытый текст

Пошаговое решение

  • Создайте проект Jmix:

    • Убедитесь, что в IntelliJ IDEA установлена Jmix Studio.

    • Создайте новый проект Jmix или откройте существующий.

  • Определите сущности:

    • В Jmix сущности – это классы Java, аннотированные @JmixEntity и обычно расширяющие StandardEntity или BaseUuidEntity для автоматической генерации идентификаторов.

  • Создайте сущность User:

    • Это будет базовый класс для Student, Teacher и Administrator.

@JmixEntity
@Table(name = "USER")
@Entity
public class User extends BaseUuidEntity {
    @Column(name = "USERNAME", nullable = false, unique = true)
    private String username;

    @Column(name = "PASSWORD", nullable = false)
    private String password;

    @Column(name = "EMAIL", nullable = false)
    private String email;

    // Getters and setters
}
  • Создайте сущность Student:

    • Расширьте класс User и добавьте определенные поля.

@JmixEntity
@Table(name = "STUDENT")
@Entity
public class Student extends User {
    @Column(name = "STUDENT_ID", nullable = false, unique = true)
    private String studentId;

    @Column(name = "ENROLLMENT_DATE")
    private LocalDate enrollmentDate;

    // Relationships and additional fields
}
  • Создайте сущность Teacher:

    • Расширьте класс User и добавьте определенные поля.

@JmixEntity
@Table(name = "TEACHER")
@Entity
public class Teacher extends User {
    @Column(name = "TEACHER_ID", nullable = false, unique = true)
    private String teacherId;

    @Column(name = "HIRE_DATE")
    private LocalDate hireDate;

    @Column(name = "SPECIALIZATION")
    private String specialization;

    // Relationships and additional fields
}
  • Создайте сущность Administrator:

    • Расширьте класс User и добавьте определенные поля.

@JmixEntity
@Table(name = "ADMINISTRATOR")
@Entity
public class Administrator extends User {
    @Column(name = "ADMIN_ID", nullable = false, unique = true)
    private String adminId;

    @Column(name = "ROLE")
    private String role;

    // Additional fields
}
  • Создайте сущность Course:

    • Определите структуру курса и взаимосвязи.

@JmixEntity
@Table(name = "COURSE")
@Entity
public class Course extends BaseUuidEntity {
    @Column(name = "TITLE", nullable = false)
    private String title;

    @Column(name = "DESCRIPTION")
    private String description;

    // Relationships with Module, Student, etc.
}
  • Создайте сущность Module:

    • Представляет собой модуль в рамках курса.

@JmixEntity
@Table(name = "MODULE")
@Entity
public class Module extends BaseUuidEntity {
    @Column(name = "TITLE", nullable = false)
    private String title;

    @Column(name = "DESCRIPTION")
    private String description;

    // Relationships with Material, Test, Assignment
}
  • Создайте сущности Material, Test и Assignment:

    • Включите поля продолжительности duration.

@JmixEntity
@Table(name = "MATERIAL")
@Entity
public class Material extends BaseUuidEntity {
    @Column(name = "TITLE", nullable = false)
    private String title;

    @Column(name = "TYPE")
    private String type;

    @Column(name = "DATA")
    private String data;

    @Column(name = "DURATION")
    private Integer duration; // Duration in minutes
}

@JmixEntity
@Table(name = "TEST")
@Entity
public class Test extends BaseUuidEntity {
    @Column(name = "TITLE", nullable = false)
    private String title;

    @Column(name = "DATE")
    private LocalDate date;

    @Column(name = "DURATION")
    private Integer duration; // Duration in minutes

    // Relationships with Question
}

@JmixEntity
@Table(name = "ASSIGNMENT")
@Entity
public class Assignment extends BaseUuidEntity {
    @Column(name = "TITLE", nullable = false)
    private String title;

    @Column(name = "DESCRIPTION")
    private String description;

    @Column(name = "DURATION")
    private Integer duration; // Duration in minutes

    @Column(name = "DUE_DATE")
    private LocalDate dueDate;
}

Объяснение:

  • Наследование: Student, Teacher и Administrator расширяют сущность User для повторного использования общих полей.

  • Аннотации: Используйте @JmixEntity и @Table для определения сущностей и их таблиц базы данных.

  • Отношения: При необходимости определите отношения между объектами, используя аннотации JPA, такие как @OneToMany, @ManyToOne и т.д.

Это определяет комплексную доменную модель для вашей образовательной платформы, используя возможности Jmix по управлению сущностями и их сохранению.

Просим нейросеть разбить классы по пакетам:

Разбей все классы по пакетам, если базовый пакет ru.dva.eduplatform.model.

Каждый пакет должен содержать не более 5 классов.

Получаем ответ:

Чтобы организовать ваши классы модели предметной области в пакеты в базовом пакете ru.dva.eduplatform.model, мы классифицируем их на основе их функциональности и взаимосвязей. Это гарантирует, что каждый пакет будет содержать не более пяти классов, что сделает структуру более управляемой и удобной для сопровождения.

Структура пакетов

  1. Базовый пакет: ru.dva.eduplatform.model

    • Это корневой пакет для всех ваших классов моделей.

  2. Пакет User: ru.dva.eduplatform.model.user

    • Содержит классы, связанные с управлением пользователями и ролями.

  3. Пакет Course: ru.dva.eduplatform.model.course

    • Содержит классы, связанные с курсами и их компонентами.

  4. Пакет Content: ru.dva.eduplatform.model.content

    • Содержит классы, связанные с образовательным контентом и материалами.

  5. Пакет Assessment: ru.dva.eduplatform.model.assessment

    • Содержит классы, связанные с тестами, заданиями и вопросами.

  6. Пакет Communication: ru.dva.eduplatform.model.communication

    • Содержит классы, связанные с уведомлениями и форумами.

Подробное распределение классов

1. Пакет User: ru.dva.eduplatform.model.user

  • Классы:

    • User

    • Student

    • Teacher

    • Administrator

2. Пакет Course: ru.dva.eduplatform.model.course

  • Классы:

    • Course

    • Module

3. Пакет Content: ru.dva.eduplatform.model.content

  • Классы:

    • Material

4. Пакет Assessment: ru.dva.eduplatform.model.assessment

  • Классы:

    • Test

    • Assignment

    • Question

5. Пакет Communication: ru.dva.eduplatform.model.communication

  • Классы:

    • Notification

    • Forum

    • Post

Пример определения класса в пакете

Вот как можно определить класс User в пакете user:

package ru.dva.eduplatform.model.user;

import io.jmix.core.metamodel.annotation.JmixEntity;
import io.jmix.core.entity.BaseUuidEntity;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Table;

@JmixEntity
@Table(name = "USER")
@Entity
public class User extends BaseUuidEntity {
    @Column(name = "USERNAME", nullable = false, unique = true)
    private String username;

    @Column(name = "PASSWORD", nullable = false)
    private String password;

    @Column(name = "EMAIL", nullable = false)
    private String email;

    // Getters and setters
}

Объяснение:

  • Организация пакетов: Каждый пакет группирует связанные классы, при этом ни один пакет не превышает пяти классов.

  • Модульность: Такая структура повышает модульность, облегчая управление и расширение приложения.

  • Ремонтопригодность: Благодаря организации классов в логические пакеты кодовая база становится более удобной для сопровождения и навигации.

Эта структура пакетов поможет вам поддерживать чистую и организованную кодовую базу для вашей образовательной платформы.

Просим нейросеть разбить все классы по пакетам:

Убедись, что все импорты корректны и соответствуют созданным пакетам.

Выведи код всех классов, указав название пакета каждого класса и импорты.

Для каждого класса должен быть указан пакет.

Убедись, что в результатах есть все классы.

Получаем ответ:

Ниже приведен полный код для всех классов, организованный в соответствующие пакеты с правильным импортом. Каждый класс включает объявление пакета и необходимый импорт.

Скрытый текст

User Package: ru.dva.eduplatform.model.user

User.java

package ru.dva.eduplatform.model.user;

import io.jmix.core.metamodel.annotation.JmixEntity;
import io.jmix.core.entity.BaseUuidEntity;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Table;

@JmixEntity
@Table(name = "USER")
@Entity
public class User extends BaseUuidEntity {
    @Column(name = "USERNAME", nullable = false, unique = true)
    private String username;

    @Column(name = "PASSWORD", nullable = false)
    private String password;

    @Column(name = "EMAIL", nullable = false)
    private String email;

    // Getters and setters
}

Student.java

package ru.dva.eduplatform.model.user;

import io.jmix.core.metamodel.annotation.JmixEntity;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Table;
import java.time.LocalDate;
import java.util.List;
import java.util.Map;
import ru.dva.eduplatform.model.course.Course;

@JmixEntity
@Table(name = "STUDENT")
@Entity
public class Student extends User {
    @Column(name = "STUDENT_ID", nullable = false, unique = true)
    private String studentId;

    @Column(name = "ENROLLMENT_DATE")
    private LocalDate enrollmentDate;

    // Relationships and additional fields
}

Teacher.java

package ru.dva.eduplatform.model.user;

import io.jmix.core.metamodel.annotation.JmixEntity;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Table;
import java.time.LocalDate;
import java.util.List;
import ru.dva.eduplatform.model.course.Course;
import ru.dva.eduplatform.model.content.Content;

@JmixEntity
@Table(name = "TEACHER")
@Entity
public class Teacher extends User {
    @Column(name = "TEACHER_ID", nullable = false, unique = true)
    private String teacherId;

    @Column(name = "HIRE_DATE")
    private LocalDate hireDate;

    @Column(name = "SPECIALIZATION")
    private String specialization;

    // Relationships and additional fields
}

Administrator.java

package ru.dva.eduplatform.model.user;

import io.jmix.core.metamodel.annotation.JmixEntity;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Table;
import java.util.Set;
import ru.dva.eduplatform.model.content.Content;

@JmixEntity
@Table(name = "ADMINISTRATOR")
@Entity
public class Administrator extends User {
    @Column(name = "ADMIN_ID", nullable = false, unique = true)
    private String adminId;

    @Column(name = "ROLE")
    private String role;

    // Additional fields
}

Course Package: ru.dva.eduplatform.model.course

Course.java

package ru.dva.eduplatform.model.course;

import io.jmix.core.metamodel.annotation.JmixEntity;
import io.jmix.core.entity.BaseUuidEntity;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Table;
import java.util.List;
import ru.dva.eduplatform.model.user.Student;
import ru.dva.eduplatform.model.content.Module;

@JmixEntity
@Table(name = "COURSE")
@Entity
public class Course extends BaseUuidEntity {
    @Column(name = "TITLE", nullable = false)
    private String title;

    @Column(name = "DESCRIPTION")
    private String description;

    // Relationships with Module, Student, etc.
}

Module.java

package ru.dva.eduplatform.model.course;

import io.jmix.core.metamodel.annotation.JmixEntity;
import io.jmix.core.entity.BaseUuidEntity;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Table;
import java.util.List;
import ru.dva.eduplatform.model.content.Material;
import ru.dva.eduplatform.model.assessment.Test;
import ru.dva.eduplatform.model.assessment.Assignment;

@JmixEntity
@Table(name = "MODULE")
@Entity
public class Module extends BaseUuidEntity {
    @Column(name = "TITLE", nullable = false)
    private String title;

    @Column(name = "DESCRIPTION")
    private String description;

    // Relationships with Material, Test, Assignment
}

Content Package: ru.dva.eduplatform.model.content

Material.java

package ru.dva.eduplatform.model.content;

import io.jmix.core.metamodel.annotation.JmixEntity;
import io.jmix.core.entity.BaseUuidEntity;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Table;

@JmixEntity
@Table(name = "MATERIAL")
@Entity
public class Material extends BaseUuidEntity {
    @Column(name = "TITLE", nullable = false)
    private String title;

    @Column(name = "TYPE")
    private String type;

    @Column(name = "DATA")
    private String data;

    @Column(name = "DURATION")
    private Integer duration; // Duration in minutes
}

Assessment Package: ru.dva.eduplatform.model.assessment

Test.java

package ru.dva.eduplatform.model.assessment;

import io.jmix.core.metamodel.annotation.JmixEntity;
import io.jmix.core.entity.BaseUuidEntity;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Table;
import java.time.LocalDate;
import java.util.List;
import ru.dva.eduplatform.model.course.Course;
import ru.dva.eduplatform.model.assessment.Question;

@JmixEntity
@Table(name = "TEST")
@Entity
public class Test extends BaseUuidEntity {
    @Column(name = "TITLE", nullable = false)
    private String title;

    @Column(name = "DATE")
    private LocalDate date;

    @Column(name = "DURATION")
    private Integer duration; // Duration in minutes

    // Relationships with Question
}

Assignment.java

package ru.dva.eduplatform.model.assessment;

import io.jmix.core.metamodel.annotation.JmixEntity;
import io.jmix.core.entity.BaseUuidEntity;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Table;
import java.time.LocalDate;

@JmixEntity
@Table(name = "ASSIGNMENT")
@Entity
public class Assignment extends BaseUuidEntity {
    @Column(name = "TITLE", nullable = false)
    private String title;

    @Column(name = "DESCRIPTION")
    private String description;

    @Column(name = "DURATION")
    private Integer duration; // Duration in minutes

    @Column(name = "DUE_DATE")
    private LocalDate dueDate;
}

Question.java

package ru.dva.eduplatform.model.assessment;

import io.jmix.core.metamodel.annotation.JmixEntity;
import io.jmix.core.entity.BaseUuidEntity;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Table;
import java.util.List;

@JmixEntity
@Table(name = "QUESTION")
@Entity
public class Question extends BaseUuidEntity {
    @Column(name = "TEXT", nullable = false)
    private String text;

    @Column(name = "OPTIONS")
    private List<String> options;

    @Column(name = "CORRECT_ANSWER")
    private String correctAnswer;
}

Communication Package: ru.dva.eduplatform.model.communication

Notification.java

package ru.dva.eduplatform.model.communication;

import io.jmix.core.metamodel.annotation.JmixEntity;
import io.jmix.core.entity.BaseUuidEntity;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Table;
import java.time.LocalDate;
import ru.dva.eduplatform.model.user.User;

@JmixEntity
@Table(name = "NOTIFICATION")
@Entity
public class Notification extends BaseUuidEntity {
    @Column(name = "MESSAGE", nullable = false)
    private String message;

    @Column(name = "DATE")
    private LocalDate date;

    // Method to send notification to a user
}

Forum.java

package ru.dva.eduplatform.model.communication;

import io.jmix.core.metamodel.annotation.JmixEntity;
import io.jmix.core.entity.BaseUuidEntity;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Table;
import java.util.List;
import ru.dva.eduplatform.model.communication.Post;

@JmixEntity
@Table(name = "FORUM")
@Entity
public class Forum extends BaseUuidEntity {
    @Column(name = "TOPIC", nullable = false)
    private String topic;

    // Relationships with Post
}

Post.java

package ru.dva.eduplatform.model.communication;

import io.jmix.core.metamodel.annotation.JmixEntity;
import io.jmix.core.entity.BaseUuidEntity;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Table;
import java.time.LocalDate;

@JmixEntity
@Table(name = "POST")
@Entity
public class Post extends BaseUuidEntity {
    @Column(name = "AUTHOR", nullable = false)
    private String author;

    @Column(name = "CONTENT", nullable = false)
    private String content;

    @Column(name = "DATE")
    private LocalDate date;
}

Объяснение:

  • Организация пакетов: Каждый класс помещается в пакет, отражающий его роль в системе, при этом ни один пакет не должен превышать пяти классов.

  • Импорт: Включены все необходимые файлы импорта, гарантирующие, что каждый класс может корректно функционировать в своем пакете.

  • Аннотации: Аннотации Jmix используются для определения сущностей и их сохранения в базе данных.

Этот код обеспечивает хорошо организованную и функциональную модель предметной области для вашей образовательной платформы с использованием Jmix.

Заключение

В рамках одной небольшой заметки невозможно рассказать обо всех наших экспериментах по разработке кода с помощью искусственного интеллекта.

Выполнение описанных экспериментов заняло не более пяти минут. К сожалению их описание потребовало значительно больше времени. Вероятно и прочтение этой заметки потребовало больше пяти минут.

Если эта тема интересна для читателей автор готов продолжить описание экспериментов по разработке кода с помощью Jmix AI Assistant, включая следующие:

  • Генерация класса, заполняющего доменную модель тестовыми данными

  • Обеспечение персистентности базы данных

  • Реализация REST API для модели домена, включая создание контроллеров и REST сервисов

  • Генерация пользовательского интерфейса

Автор: val6852

Источник

Рейтинг@Mail.ru
Rambler's Top100