Commit 18169380 authored by Anthony Gautreau's avatar Anthony Gautreau
Browse files

Ajout d'un simple CRUD pour Role et Utilisateur

parent 428a3819
Loading
Loading
Loading
Loading
+1 −0
Changes for .gitignore: 1 added line, 0 removed lines.
Original line number Diff line number Diff line
@@ -6,6 +6,7 @@ vendor
api/vendor
node_modules
frontend/node_modules
frontend/dist
###> friendsofphp/php-cs-fixer ###
/.php-cs-fixer.php
/.php-cs-fixer.cache
+4 −2
Changes for api/src/Dto/UtilisateurInscriptionInput.php: 4 added lines, 2 removed lines.
Original line number Diff line number Diff line
@@ -12,12 +12,14 @@ class UtilisateurInscriptionInput
    #[Groups(['user:register'])]
    public string $email;

    #[Groups(['user:register'])]
    public ?string $username;

    #[Assert\NotBlank]
    #[Assert\Length(min: 4)]
    #[Groups(['user:register'])]
    public string $plainPassword;

    #[Assert\NotBlank]
    #[Groups(['user:register'])]
    public string $typeConnexion;
    public ?string $typeConnexion;
}
+1 −0
Changes for api/src/Entity/AbstractUser.php: 1 added line, 0 removed lines.
Original line number Diff line number Diff line
@@ -37,6 +37,7 @@ abstract class AbstractUser implements UserInterface, PasswordAuthenticatedUserI
    protected ?int $id = null;

    #[ORM\Column(length: 180, unique: true, nullable: true)]
    #[Groups(['user:read', 'user:create', 'user:update'])]
    protected ?string $username = null;

    #[Assert\NotBlank]
+10 −4
Changes for api/src/State/UtilisateurInscriptionProcessor.php: 10 added lines, 4 removed lines.
Original line number Diff line number Diff line
@@ -24,12 +24,18 @@ class UtilisateurInscriptionProcessor implements ProcessorInterface
        /** @var UtilisateurInscriptionInput $data */
        $user = new User();
        $user->setEmail($data->email);
        if(!$data->username){
            $user->setUsername($data->email);
        } else {
            $user->setUsername($data->username);
        }
        $user->setPassword($this->hasher->hashPassword($user, $data->plainPassword));

        $roleUser = $this->em->getRepository(Role::class)->findOneBy(['code' => 'ROLE_USER']);
        if ($roleUser) {
            $user->addRole($roleUser);
        }
        /** @TODO: Gérer le role par défaut */
//        $roleUser = $this->em->getRepository(Role::class)->findOneBy(['code' => 'ROLE_USER']);
//        if ($roleUser) {
//            $user->addRole($roleUser);
//        }

        $this->em->persist($user);
        $this->em->flush();
+113 −0
Changes for frontend/src/components/RoleEditDrawer.vue: 113 added lines, 0 removed lines.
Original line number Diff line number Diff line

<template>
  <q-drawer
      :model-value="modelValue"
      @update:model-value="emit('update:modelValue', $event)"
      side="right"
      :width="900"
      bordered
      overlay
      elevated
  >
    <!-- Header -->
    <div class="q-pa-md text-h6">
      Role {{role?.libelle}}
      <div class="text-caption text-grey">
        {{role?.code}}
      </div>
    </div>

    <!-- Content -->
    <q-card flat bordered class="q-mx-md q-my-sm">
      <q-card-section>
        <q-input v-model="draft.code" label="Code" outlined @keyup.enter="saveDraft" />
        <q-input v-model="draft.libelle" label="Libellé" outlined class="q-mt-md" @keyup.enter="saveDraft" />
      </q-card-section>
      <q-card-actions align="right">
        <q-btn flat label="Annuler" color="primary" @click="close" />
        <q-btn label="Enregistrer" color="primary" @click="saveDraft" />
        <q-btn v-if="role && role['@id'] !== 'new'" label="Supprimer" color="negative" @click="deleteRole(role)" />
      </q-card-actions>
    </q-card>

  </q-drawer>
</template>

<script setup>
import { computed, ref, watch } from 'vue'

import { useRoleStore } from '@/stores/roleStore'

const props = defineProps({
  modelValue: Boolean,
  role: Object
})

const emit = defineEmits(['update:modelValue'])

const roleStore = useRoleStore()

const draft = ref({
  '@id': null,
  id: null,
  code: null,
  libelle: null,
})

const resetDraft = () => {
  draft.value['@id'] = null
  draft.value.id = null
  draft.value.code = null
  draft.value.libelle = null
}

watch(() => props.role, (newRole) => {
  if(newRole) {
    draft.value['@id'] = newRole['@id']
    draft.value.id = newRole.id
    draft.value.code = newRole.code
    draft.value.libelle = newRole.libelle
  } else {
    resetDraft()
  }
})

function startCreate() {
  resetDraft()
  draft.value['@id'] = 'new'
  draft.value.resourceClass = null
  draft.value.resourceId = null
}

function close() {
  emit('update:modelValue', false)
}

async function saveDraft() {

  if(draft.value['@id'] === 'new') {
    console.log('create')

    // Create role
    await roleStore.createRole(draft.value)

  } else{
    const roleBase = roleStore.roles.find(r => r['@id'] === draft.value['@id'])
    console.log(draft.value, roleBase)

    await roleStore.patchRole(
        {
          code: draft.value.code,
          libelle: draft.value.libelle,
        },
        draft.value.id
    )
  }
  resetDraft()
  close()
}

async function deleteRole(role) {
  await roleStore.deleteRole(role.id)
}
</script>
 No newline at end of file
Loading