Skip to content

ebouchut/learn-dev

Learn-dev: An Interactive Programming Learning Platform

Presentation

An interactive programming learning platform with automated assessment and hands-on practice.

This project aims to enable students to learn programming through hands-on practice with automated assessment and real-time feedback.

It is also my capstone project for the Web and Web Mobile Developer REAC certification, which I am currently undergoing at La Plateforme_.

Goals

  • Provide an interactive environment for learning programming concepts
  • Implement automated code assessment and feedback
  • Support multiple user roles (such as Student, Instructor, Admin)
  • Demonstrate full-stack development skills using industry standards

Tech Stack

This project is built with Java/Spring Boot backend and Thymeleaf frontend.

Backend

  • Language: Java 21
  • Frameworks:
    • Java Framework used to build (Web) Applications and REST endpoints.
  • Authentication and authorization framework:
  • Spring Security:
  • Database:
  • Build and dependency management tool:
  • Containerization:
    • Podman (preferred over Docker) to containerize parts of the application as container images that can run as autonomous containers.

Frontend

TODO

Development Tools

  • JetBrains IntelliJ IDEA: IDE
  • Git: Version control
  • Maven: Build and dependency management
  • Podman: Containerization
  • Swagger: API documentation

Getting Started

Prerequisites

See the Tech Stack section.

Installation

  • Clone the ebouchut/learn-dev Git Repository
  • Install Docker, Docker Desktop, and Docker Compose

Clone the Git repository

#
git clone git@github.com:ebouchut/learn-dev.git
# git clone https://github.com/ebouchut/learn-dev.git

cd learn-dev

Docker Setup

From the project root folder. Install Docker and Docker Compose:

Configuration

  • Edit .env
    • Set a value for the variables POSTGRES_PASSWORD, LEARNDEV_DB_PASSWORD, MONGO_ROOT_PASSWORD

Run the application

This starts all the Docker services for the application:

docker compose up -d

For each service (postgres, mongo) declared in the Docker Compose configuration file (docker-compose.yaml), Docker Compose:

  1. downloads the Docker image (if not cached yet) from the Docker Hub registry,
  2. stores the downloaded image in the local Docker image cache,
  3. starts a Docker container based on this image (if it is not already running).

Stop the Application

This stops all the Docker services for the application:

docker compose down

Docker Terminology

I use ** Docker Compose** (a CLI tool) to describe and handle the lifecycle of services that comprise my application.

A service is basically a component of the application packaged as a Docker container. It specifies the Docker image and version, configuration, and the network and Docker volume(s) if any.

A Docker image is pre-packaged piece of software that can work as a standalone on Linux. Docker Hub is a public registry that hosts and serves public Docker images.

Postgres Service

Start Postgres

Running the app using docker compose up -d starts all the application services, including postgres.

To only start the postgres service:

docker compose start -d postgres
docker compose logs postgres

Note

The above command downloads, installs the postgres Docker image specified by the postgres service in docker-compose.yaml. Then it runs a Docker container with this image.

Note

A Docker init script automatically creates the database user and the application database when the postgres service is run for the first time.

Now, check that postgres is running:

docker compose ps | grep postgres

To recreate the database, and start from scratch you need to stop the postgres container and remove the (data) volumes.
See the Remove all Posgres Databases section for details.

Stop Postgres

docker compose stop postgres

Remove all Postgres Databases

Stops and remove the postgres container and its data volume.

Caution

This is a destructive command that will remove all the databases (structure and content) created by Postgres running in the container.

docker compose stop postgres  # Stop the container
docker rm           postgres  # Remove the container
docker volume rm    pg_data   # Remove the named volume 

Mongo Service

Start MongoDB

docker compose start mongo

Now, check that mongo is running:

docker compose ps | grep mongo

Stop MongoDB

docker compose stop mongo

Remove MongoDB and its Databases

Caution

This destructive command will stop and remove the container, then remove its data volume (all the databases created by MongoDB running in the container).

docker compose stop mongo # Stop container
docker  rm          mongo # Remove the stopped container
docker volume rm    learn-dev_mongo_data # Remove the named volume   

Project Status

See the GitHub Project for up-to-date information.

Contributing

See the CONTRIBUTING.md file for how to help out.
It contains detailed guidelines, including:

  • Architecture overview
  • Code:
    • Documentation
    • Directory structure
    • Naming conventions
  • Database:
    • Database schema, ERD (Entity Relationships Diagram)
    • Running database migrations
  • Git:
    • Git branching strategy
    • Git commit message conventions
  • Dependencies:
    • Adding dependencies
    • Installing dependencies
  • Running tests
  • Submitting pull requests
  • ...

License

This project is dual-licensed
under AGPL v3 for open source use
and a commercial license for proprietary use.

See LICENSE for details.

Authors

Eric Bouchut:

Resources

About

An interactive programming learning platform with automated assessment and hands-on practice.

Topics

Resources

License

Code of conduct

Contributing

Security policy

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors