How much?

$35

per hour

What do I get?

You get what is mentioned below + me for a couple of hours 😛

Best practices

Usage of best practices accordingly. The code below is a REST action, for that function I am using the repository pattern.

Design patterns

I have a complete course on Design Patterns with PHP and you can find the source code for the course here.

4 years of Laravel experience

Documentation is not enough, I have spent time reading Laravel's source code on GitHub to understand the internals much better!

3 years of VueJS/NuxtJS experience

I use VueJS and NuxtJS according to the requirements.

Comments

All functions have comments so me and other developers know exactly what is going on with that function.

Readable code

I keep my functions small, around 5-15 lines. That means that the functions are small enough to read and understand.

Swagger documentation

Swagger annotations are used to document that function with Swagger.io.

Tests

@see annotation is used so the developer can immediately jump to the tests of that function.

By using the @see annotation we can also see what is tested for that function.

Database Transactions

Unfortunately, transactions are something that developers don't use!

Error handling and logging

Another important step that developers tend to omit. NOT WITH ME!

Sample code

/**
     * @OA\Post(
     *     path="/api/v1/documents",
     *     description="Create document.",
     *     tags={"Document"},
     *     security={
     *      {"passport": {}},
     *     },
     *      @OA\Parameter(name="text", in="query", description="Text", required=true,
     *         @OA\Schema(type="string")
     *     ),
     *      @OA\Parameter(name="type", in="query", description="Type", required=true,
     *         @OA\Schema(type="string", @OA\Items(
     *                 type="string",
     *                 enum = {"email", "brochure", "flyer", "magazine", "newsletter", "press_release", "marketing_text", "report", "radio_report", "speech", "survey", "something_else"},
     *         ))
     *     ),
     *     @OA\Response(response="201", description="Created"),
     *     @OA\Response(response="422", description="Validation errors"),
     *     @OA\Response(response="500", description="Server error")
     * )
     *
     * Create document.
     *
     * @see DocumentControllerTest::will_fail_with_validation_errors_when_creating_document()
     * @see DocumentControllerTest::will_create_document()
     *
     * @param DocumentStoreRequest $request
     * @return DocumentResource
     * @throws Error500Exception
     */
    public function store(DocumentStoreRequest $request): DocumentResource
    {
        try {
            $this->beginTransaction();

            $document = $this->documentRepo->create([
                'user_id' => auth()->id(),
                'text' => $request->text,
                'letter_count' => strlen($request->text),
                'type' => $request->type,
                'credits' => Credits::calculate($request->text)
            ]);

            $this->commit();

            return new DocumentResource($document);
        } catch (\Exception $e) {
            $this->rollBack();

            throw new Error500Exception($e);
        }
    }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53