During development, I was tasked with creating an authentication system. Several solutions were considered, but ultimately, I chose to use JWTtokens. Wanting to have full control over the situation, I decided to write it myself in order to have control over things such as prefixes. This took several hours, but I was able to understand and write my own middleware. In the future, I plan to add refresh token implementation.
During project planning, we chose Mongo DB since we knew we would not be working with a large amount of data and had only one main entity to deal with, "mentors". However, during development, I encountered a problem with the lack of clear consistency, which led us to embed a structure where it should not have been. This was temporarily replaced with several structures in place of embedding, but later on, I discovered the `bson:, inline` instruction for the structure and implemented it cleanly.
At one point, we needed to add images, but our budget didn't allow for having servers dedicated to hosting them. We began searching for a third-party service and eventually chose Cloudinary due to their well-documented API and the fact that they offered a free plan with up to 20,000 monthly uploads and editing capabilities, which was ideal for us at the start. We decided to transmit the images through base64 since it allowed for easy embedding into JSON.
When I first joined, I was assigned to a new project to create a mobile application for a CRM system. The design was quite complex due to the fact that we were creating the app for multiple platforms, including iPad. One of the challenges we faced was the large amount of data that needed to be passed between screens. After reviewing the available options, I decided to prioritize Redux over Mobx, as it allowed data to be manipulated more strictly, helping to avoid accidental changes in the future.
The layout consisted of 23 screens, among which it was difficult to reuse components due to the employer's design. However, I found a solution and used compound components. I created skeletons that I later reused and modified using`children`, although unfortunately many components had a lot of props.
Another problem was with fields that had a ready-made selection. Some of them, employer requested to use as dropdowns, while others preferred a selection system similar to theirs. There were several issues with the selection system, as they varied, with some based on dates and others based on values, but all were supposed to look the same. I had to create two components that looked the same but functioned differently under the hood. While it was relatively simple for the value-based selection, I had to put in extra effort for the date-based selection due to a lack of well-functioning libraries and documentation. In the end, I managed to solve the problem by using different libraries for different platforms, and the task was completed successfully.
Used languages, technologies, and tools: React, React Native, Figma, Redux, react-router-dom, etc.
Базы данных, CAP теорема, оптимизация ПО, CI/CD, тестирование, test-containers, testify, go-mock