diff --git a/back-skeleton/initdb/2_DEFAULT_ENTRIES.sql b/back-skeleton/initdb/2_DEFAULT_ENTRIES.sql
index ae5925afbdbdd1ba3f9bb0a635c2fc7bfcd1d9e5..321b728e0a2ed8dab2c7b00e9d6a898db1786cc2 100644
--- a/back-skeleton/initdb/2_DEFAULT_ENTRIES.sql
+++ b/back-skeleton/initdb/2_DEFAULT_ENTRIES.sql
@@ -1,8 +1,17 @@
 INSERT INTO majors (id, name, description) VALUES (1, 'MIN', 'Ouaiiis du code partout');
 
 INSERT INTO students (id, first_name, last_name, birthdate, major_id, image) VALUES (1, 'Paul', 'Harrohide', '2002-06-15', 1, null);
+INSERT INTO students (id, first_name, last_name, birthdate, major_id, image) VALUES (2, 'Jean', 'Bonbeur', '2001-08-21', 1, null);
+INSERT INTO students (id, first_name, last_name, birthdate, major_id, image) VALUES (3, 'Alain', 'Térieur', '2000-01-11', 1, null);
 
-INSERT INTO courses (id, name, hours) VALUES (1, 'Java', 30);
-INSERT INTO student_course (id, student_id, course_id) VALUES (1, 1, 1);
+INSERT INTO courses (id, name, hours) VALUES (1, 'Spanish', 30);
+INSERT INTO courses (id, name, hours) VALUES (2, 'German', 30);
+INSERT INTO courses (id, name, hours) VALUES (3, 'Internet of Things', 30);
+INSERT INTO courses (id, name, hours) VALUES (4, 'Thermodynamic', 30);
+INSERT INTO courses (id, name, hours) VALUES (5, 'Anatomy', 30);
+INSERT INTO courses (id, name, hours) VALUES (6, 'Maths', 30);
+INSERT INTO courses (id, name, hours) VALUES (7, 'Java', 30);
+INSERT INTO courses (id, name, hours) VALUES (8, 'Lean Management', 30);
+INSERT INTO student_course (id, student_id, course_id) VALUES (1, 1, 7);
 
 
diff --git a/back-skeleton/src/main/java/com/takima/backskeleton/DAO/CourseDao.java b/back-skeleton/src/main/java/com/takima/backskeleton/DAO/CourseDao.java
new file mode 100644
index 0000000000000000000000000000000000000000..97657ed4e359b6a7ad61b2ce7c08fb838303a65f
--- /dev/null
+++ b/back-skeleton/src/main/java/com/takima/backskeleton/DAO/CourseDao.java
@@ -0,0 +1,9 @@
+package com.takima.backskeleton.DAO;
+
+import com.takima.backskeleton.models.Course;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.stereotype.Repository;
+
+@Repository
+public interface CourseDao extends JpaRepository<Course, Long> {
+}
diff --git a/back-skeleton/src/main/java/com/takima/backskeleton/controllers/CourseController.java b/back-skeleton/src/main/java/com/takima/backskeleton/controllers/CourseController.java
new file mode 100644
index 0000000000000000000000000000000000000000..b7425bf7a017facb226767951d6f47b29089e1b2
--- /dev/null
+++ b/back-skeleton/src/main/java/com/takima/backskeleton/controllers/CourseController.java
@@ -0,0 +1,24 @@
+package com.takima.backskeleton.controllers;
+
+import com.takima.backskeleton.models.Course;
+import com.takima.backskeleton.services.CourseService;
+import lombok.RequiredArgsConstructor;
+import org.springframework.web.bind.annotation.CrossOrigin;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.List;
+
+@CrossOrigin
+@RequestMapping("courses")
+@RestController
+@RequiredArgsConstructor
+public class CourseController {
+    private final CourseService courseService;
+
+    @GetMapping("")
+    public List<Course> getAllCourses() {
+        return courseService.findAll();
+    }
+}
diff --git a/back-skeleton/src/main/java/com/takima/backskeleton/controllers/StudentController.java b/back-skeleton/src/main/java/com/takima/backskeleton/controllers/StudentController.java
index 0b379e555b8f4b93fb0781c98fffdc30169428ef..16c73825355edc95c9e6accb578881aaa19bbd66 100644
--- a/back-skeleton/src/main/java/com/takima/backskeleton/controllers/StudentController.java
+++ b/back-skeleton/src/main/java/com/takima/backskeleton/controllers/StudentController.java
@@ -5,6 +5,7 @@ import com.takima.backskeleton.models.Student;
 import com.takima.backskeleton.services.StudentService;
 import lombok.RequiredArgsConstructor;
 import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
 
 import java.util.List;
 
@@ -41,4 +42,9 @@ public class StudentController {
     public void updateStudent(@RequestBody StudentDto studentDto, @PathVariable Long id) {
         studentService.updateStudent(studentDto, id);
     }
+
+    @PostMapping("/{id}/picture")
+    public void editStudentPicture(@RequestPart("file") MultipartFile file) {
+
+    }
 }
diff --git a/back-skeleton/src/main/java/com/takima/backskeleton/models/Student.java b/back-skeleton/src/main/java/com/takima/backskeleton/models/Student.java
index 894e4ec00a7ec6e93d63d42ab3c526f5725c9a5c..9370abeca55fbeb8ef16e2df2885b55d825ccb9b 100644
--- a/back-skeleton/src/main/java/com/takima/backskeleton/models/Student.java
+++ b/back-skeleton/src/main/java/com/takima/backskeleton/models/Student.java
@@ -24,7 +24,7 @@ public class Student {
             joinColumns = @JoinColumn(name = "student_id"),
             inverseJoinColumns = @JoinColumn(name = "course_id"))
     private List<Course> courses;
-    @ManyToOne()
+    @ManyToOne(cascade = CascadeType.MERGE)
     @JoinColumn(name = "major_id")
     private Major major;
     @Column(name = "image")
diff --git a/back-skeleton/src/main/java/com/takima/backskeleton/services/CourseService.java b/back-skeleton/src/main/java/com/takima/backskeleton/services/CourseService.java
new file mode 100644
index 0000000000000000000000000000000000000000..68a553c6e7b69b8a648caa22515ec22cc1598be9
--- /dev/null
+++ b/back-skeleton/src/main/java/com/takima/backskeleton/services/CourseService.java
@@ -0,0 +1,20 @@
+package com.takima.backskeleton.services;
+
+import com.takima.backskeleton.DAO.CourseDao;
+import com.takima.backskeleton.models.Course;
+import com.takima.backskeleton.models.Major;
+import lombok.RequiredArgsConstructor;
+import org.springframework.stereotype.Component;
+
+import java.util.ArrayList;
+import java.util.List;
+
+@Component
+@RequiredArgsConstructor
+public class CourseService {
+    private final CourseDao courseDao;
+
+    public List<Course> findAll() {
+        return courseDao.findAll();
+    }
+}
diff --git a/back-skeleton/src/main/java/com/takima/backskeleton/services/StudentService.java b/back-skeleton/src/main/java/com/takima/backskeleton/services/StudentService.java
index f8a8b5a249d379197d182a09dd88e4a1350cb8de..cc1e205bb02d50f5582d630d017db84fd1e7f5d4 100644
--- a/back-skeleton/src/main/java/com/takima/backskeleton/services/StudentService.java
+++ b/back-skeleton/src/main/java/com/takima/backskeleton/services/StudentService.java
@@ -43,6 +43,7 @@ public class StudentService {
         } catch (IOException e) {
             throw new RuntimeException("Error with Student image", e);
         }
+
         studentDao.save(student);
     }
 
diff --git a/back-skeleton/src/main/resources/application.properties b/back-skeleton/src/main/resources/application.properties
index ac2ecdf2a50f49d3b5d285f39d058ee3aa3ec43e..fa51bd1222e8582f6ce7ce4505355d904e98ea46 100644
--- a/back-skeleton/src/main/resources/application.properties
+++ b/back-skeleton/src/main/resources/application.properties
@@ -1,3 +1,5 @@
 spring.datasource.url=jdbc:postgresql://localhost:5432/${DATABASE_NAME}
 spring.datasource.username=${DATABASE_USER}
 spring.datasource.password=${DATABASE_PASSWORD}
+spring.servlet.multipart.max-file-size=10MB
+spring.servlet.multipart.max-request-size=10MB
\ No newline at end of file
diff --git a/epf-front-skeleton-main/src/app/services/course.service.ts b/epf-front-skeleton-main/src/app/services/course.service.ts
index bddda45df6e6379d3a8d0d59fde1e4b3a808734a..b0dd5b13c0ccf2c101618b3fd919bf6c61200bda 100644
--- a/epf-front-skeleton-main/src/app/services/course.service.ts
+++ b/epf-front-skeleton-main/src/app/services/course.service.ts
@@ -11,7 +11,7 @@ export class CourseService {
   constructor(private constantsMockService: ConstantsMockService, private http: HttpClient) {
   }
 
-  private coursesUrl = "http://localhost:8080/api/courses"
+  private coursesUrl = "http://localhost:8080/courses"
 
   // // FIXME : change to api call with httpclient
   // findAll(): Observable<Course[]> {
diff --git a/epf-front-skeleton-main/src/app/services/student.service.ts b/epf-front-skeleton-main/src/app/services/student.service.ts
index 0522c9a49f4d27cedecba140baed24cde18d90cf..310ae3f5c50703a4e671e3ddc589e695f36d3223 100644
--- a/epf-front-skeleton-main/src/app/services/student.service.ts
+++ b/epf-front-skeleton-main/src/app/services/student.service.ts
@@ -20,11 +20,11 @@ export class StudentService {
   }
 
   findById(id: number): Observable<Student> {
-    return this.http.get<Student>(this.studentsUrl + `/${id}` )
+    return this.http.get<Student>(`${this.studentsUrl}/${id}`)
   }
 
   update(id: number, student: Student): Observable<Student> {
-    return this.http.post<Student>(this.studentsUrl + `/${id}`, student)
+    return this.http.post<Student>(`${this.studentsUrl}/${id}`, student)
   }
 
   create(student: Student): Observable<Student> {
@@ -32,10 +32,7 @@ export class StudentService {
   }
 
   delete(student: Student) {
-    const index = this.constantsMockService.students.indexOf(student)
-    if (index > -1) {
-      this.constantsMockService.students.splice(index, 1)
-    }
+    return this.http.delete(`${this.studentsUrl}/${student.id}`)
   }
 
   addCourseToStudent(student: Student, course: Course) {
diff --git a/epf-front-skeleton-main/src/app/students/student-details/student-details.component.html b/epf-front-skeleton-main/src/app/students/student-details/student-details.component.html
index ed5d893ca428b9c0239d023909dd972564557c8c..46d69fb74d96bd7c6f7826923d9282de250345f9 100644
--- a/epf-front-skeleton-main/src/app/students/student-details/student-details.component.html
+++ b/epf-front-skeleton-main/src/app/students/student-details/student-details.component.html
@@ -3,10 +3,11 @@
   <form (ngSubmit)="save(student)" #studentForm="ngForm">
     <div class="form-group">
       <label for="image">Picture</label>
-      <input type="file" class="form-control" id="image"
+      <input type="file" class="form-control" id="image" (change)="onFileSelected($event)"
 
         [(ngModel)]="student.image" name="image">
     </div>
+
     <div class="form-group">
       <label for="firstName">First Name</label>
       <input type="text" class="form-control" id="firstName"
@@ -18,6 +19,7 @@
         First Name is required
       </div>
     </div>
+
     <div class="form-group">
       <label for="lastName">Last Name</label>
       <input type="text" class="form-control" id="lastName"
@@ -29,6 +31,7 @@
         Last Name is required
       </div>
     </div>
+
     <div class="form-group">
       <label for="birthDate">Birthdate</label>
       <input type="date" class="form-control" id="birthDate"
@@ -40,17 +43,15 @@
         Birthdate is required
       </div>
     </div>
-    <div class="form-group">
+
+    <div *ngIf="allMajors$ | async; let allMajors" class="form-group">
       <label for="major">Major</label>
-      <input type="text" class="form-control" id="major"
-             required
-             [(ngModel)]="student.major!!.name" name="major"
-             #major="ngModel">
-      <div [hidden]="major.valid || major.pristine"
-           class="alert alert-danger">
-        Major is required
-      </div>
+      <select id="major" [(ngModel)]="majorSelectModel" name="majors" class="form-control">
+        <option [ngValue]="null" [disabled]="true">Select a major</option>
+        <option *ngFor="let major of allMajors" [ngValue]="major">{{major.name}}</option>
+      </select>
     </div>
+
     <div class="student-courses">
       <div class="d-flex align-items-center">
         <h3 class="courses-title">Courses</h3>
diff --git a/epf-front-skeleton-main/src/app/students/student-details/student-details.component.ts b/epf-front-skeleton-main/src/app/students/student-details/student-details.component.ts
index ab90308aabc6c478b8ee5b629bdfec324370b365..e5e35f5ad913edbf9a07aa8d76520e1b4476b22d 100644
--- a/epf-front-skeleton-main/src/app/students/student-details/student-details.component.ts
+++ b/epf-front-skeleton-main/src/app/students/student-details/student-details.component.ts
@@ -1,10 +1,12 @@
-import { Component } from "@angular/core"
+import { Component, OnInit } from "@angular/core"
 import { map, Observable } from "rxjs"
 import { Student } from "models/student.model"
 import { ActivatedRoute, Router } from "@angular/router"
 import { Course } from "models/course.model"
 import { CourseService } from "services/course.service"
 import { StudentService } from "services/student.service"
+import { Major } from "../../models/major.model"
+import { MajorService } from "../../services/major.service"
 
 @Component({
   selector: "epf-student-details",
@@ -13,17 +15,22 @@ import { StudentService } from "services/student.service"
 })
 export class StudentDetailsComponent {
   student$: Observable<Student> = this._route.data.pipe(map((data) => data["student"]))
+  allMajors$: Observable<Major[]> | undefined
   allCourses$: Observable<Course[]> | undefined
+  majorSelectModel: Major | null = null
   courseSelectModel: Course | null = null
   notSelectedCourse: boolean | undefined
   today = new Date(Date.now())
+  selectedFile: File | null = null
 
   constructor(
     private _route: ActivatedRoute,
     private courseService: CourseService,
     private studentService: StudentService,
+    private majorService: MajorService,
     private router: Router,
   ) {
+    this.allMajors$ = this.majorService.findAll()
   }
 
   courseClick() {
@@ -42,14 +49,31 @@ export class StudentDetailsComponent {
     this.studentService.removeCourseToStudent(student, course)
   }
 
+  onFileSelected(event: any) {
+    this.selectedFile = event.target.files[0]
+  }
+
   save(student: Student) {
     const id = this._route.snapshot.params["id"]
+
+    if (this.selectedFile !== null) {
+      const formData = new FormData()
+      formData.append('file', this.selectedFile)
+    }
+
+    if (this.majorSelectModel !== null) {
+      student.major = this.majorSelectModel
+    }
+
     if (id == "new") {
-      this.studentService.create(student).subscribe()
+      this.studentService.create(student).subscribe(() => {
+        this.router.navigate(["students"])
+      })
     } else {
-      this.studentService.update(id, student).subscribe() // todo mettre à jour le listing
+      this.studentService.update(id, student).subscribe(() => {
+        this.router.navigate(["students"])
+      })
     }
-    this.router.navigate(["students"])
   }
 
   // because the format of the date doesn't fit date picker
diff --git a/epf-front-skeleton-main/src/app/students/students.component.html b/epf-front-skeleton-main/src/app/students/students.component.html
index 35fb8955cc308168360ab18038f2cae6f8ca39e2..2af75c7023efc8184fc480c56a4a3fb531fe32c7 100644
--- a/epf-front-skeleton-main/src/app/students/students.component.html
+++ b/epf-front-skeleton-main/src/app/students/students.component.html
@@ -17,15 +17,14 @@
   <tbody>
   <tr *ngFor="let student of (students$ | async)" routerLink="/student-details/{{student.id}}">
     <td>
-      <img src="assets/defaultPicture.svg" alt="Photo manquante">
-<!--  todo remplacer cette image par celle récupéré dans le backend -->
+      <img [src]="student.image" alt="Pas de photo">
     </td>
     <td>{{ student.firstName }}</td>
     <td>{{ student.lastName }}</td>
     <td>{{ student.birthdate | date : "dd/MM/yyyy" }}</td>
     <td>{{ student.major!!.name }}</td>
     <td>
-      <button mat-icon-button color="warn" (click)="deleteStudent(student)">
+      <button mat-icon-button color="warn" (click)="deleteStudent($event, student)">
         <mat-icon>delete</mat-icon>
       </button>
     </td>
diff --git a/epf-front-skeleton-main/src/app/students/students.component.ts b/epf-front-skeleton-main/src/app/students/students.component.ts
index d83297a5f45be02af855d27cb957be3c3e55ff8a..7b41c903c04bb0ab3251570c24bbdf73f8cf35fe 100644
--- a/epf-front-skeleton-main/src/app/students/students.component.ts
+++ b/epf-front-skeleton-main/src/app/students/students.component.ts
@@ -1,7 +1,7 @@
 import { Component } from "@angular/core"
 import { map, Observable } from "rxjs"
 import { Student } from "models/student.model"
-import { ActivatedRoute } from "@angular/router"
+import { ActivatedRoute, Router } from "@angular/router"
 import { StudentService } from "services/student.service"
 
 @Component({
@@ -12,11 +12,12 @@ import { StudentService } from "services/student.service"
 export class StudentsComponent {
   students$: Observable<Student[]> = this._route.data.pipe(map((data) => data["students"]))
 
-  constructor(private _route: ActivatedRoute, private studentService: StudentService) {
+  constructor(private _route: ActivatedRoute, private studentService: StudentService, private router: Router,) {
   }
 
-  deleteStudent(student: Student) {
-    this.studentService.delete(student)
+  deleteStudent(event: any, student: Student) {
+    event.stopPropagation()
+    this.studentService.delete(student).subscribe(() => this.router.navigate(["students"]))
   }
 
   searchByMajorAndCourse($event: Observable<Student[]>) {