📄Experience Smart Contract

Este contrato almacena todas las Experiencias Laborales y Educativas del usuario.

Estructura

struct Experience {
    uint256 experienceId;
    address user;
    uint8 experienceType;
    string role;
    string description;
    string company;
    address companyAddress;
    uint256 startDate;
    uint256 endDate;
    bool companyValidation;
    Skill[] skills;
    string moreInfoLinks;
}
struct Skill {
    string skill;
    uint8 level;
}

Ejemplo

{
  "experienceId": 1,
  "user": "0xd8da6bf26964af9d7eed9e03e53415d37aa96045",
  "experienceType": 0,
  "role": "Developer",
  "description": "Fullstack Blockchain Developer",
  "company": "",
  "companyAddress": "0xea83c649dd49a6ec44c9e2943eb673a8fbb7bab6",
  "startDate": 1704078000,
  "endDate": 1717124400,
  "companyValidation": true,
  "skills": [
    {
      "skill": "Javascript",
      "level": 8
    },
    {
      "skill": "English",
      "level": 0
    }
  ],
  "moreInfoLink": "ipfs://ipfs.io/XXXXXXX" 
}

Semántica de los campos

  • experienceId: Identificador de la Experiencia. Este valor es asignado correlativamente por el Smart Contract.

  • user: Dirección del usuario. Propietario del registro.

  • experienceType: Tipo de la Experiencia (0 = Profesional, 1 = Educativa).

  • role: Nombre del rol.

  • description: Describe el rol con más detalles.

  • company: Nombre de la empresa/institución. Es solo descriptivo; esta experiencia no puede ser verificada si se utiliza este campo. Debe estar vacío si se proporciona una dirección de la empresa o si la experiencia es freelance.

  • companyAddress: Dirección de la empresa/institución. Debe ser proporcionada por la empresa/institución misma. Debe ser diferente de la dirección del usuario. El propietario de esta dirección puede verificar la Experiencia. Puede estar vacío si la empresa/institución no tiene dirección o si la experiencia es freelance.

  • startDate: Fecha en que comenzó la Experiencia. Almacenar como Timestamp Unix (segundos desde el 01-01-1970). Campo obligatorio.

  • endDate: Fecha en que terminó la Experiencia. Almacenar como Timestamp Unix (segundos desde el 01-01-1970). Puede ser 0 si la Experiencia aún no ha terminado. Debe ser 0 si la Experiencia es freelance. Debe ser mayor que startDate.

  • companyValidation: Si se proporciona una companyAddress, el propietario de esta puede validar la Experiencia.

  • skills: Habilidades usadas en esta experiencia.

  • moreInfoLink: Enlace a una metadata opcional. Tipicamente este enlace apuntará a un JSON con diferentes campos para cualquier tipo de metadata (fotos, videos, campos informativos, etc)

Funciones

addExperience: Agrega una nueva experiencia.

updateExperience: Actualiza una experiencia existente.

endExperience: Finaliza una experiencia existente.

deleteExperience: Elimina una experiencia existente.

updateExperienceValidation: Valida una experiencia existente.

Reglas de validación

A continuación se presentan varias reglas que una Experiencia debe seguir para garantizar un estado consistente. Esto se aplica a las operaciones addExperience, updateExperience y endExperience:

  1. La dirección del usuario (user) debe ser diferente de la dirección cero.

  2. El tipo de Experiencia (experienceType) debe ser 0 (Profesional) o 1 (Educativa).

  3. El rol (role) no debe estar vacío.

  4. Debe especificarse un nombre de empresa (company) o una dirección de empresa (companyAddress) para experiencias no freelance (uno u otro, no ambos).

  5. La dirección del usuario debe ser diferente de la dirección de la empresa (companyAddress).

  6. La experiencia freelance (sin nombre de empresa ni dirección de empresa) no debe tener endDate.

  7. StartDate no debe estar vacío.

  8. EndDate debe ser mayor que startDate.

Last updated