public async Task <Response <SchemaProgress> > Handle(
            JoinSchemaCommand request,
            CancellationToken cancellationToken)
        {
            var schema = await _shopStore.GetSchema(request.SchemaId);

            var assignedSchema = SchemaFactory.Resolve(schema);

            if (!assignedSchema.Valid(_dateTime))
            {
                return(Response.Fail <SchemaProgress>("Schema not valid"));
            }

            if (await _userStore.InSchemaAsync(request.UserId, request.SchemaId))
            {
                return(Response.Fail <SchemaProgress>("Schema already joined"));
            }

            var progress = await _userStore.CreateSchemaProgressAsync(request.UserId, request.SchemaId);

            return(Response.Ok(progress, "Schema Joined"));
        }