Starting the first day of my last internship week, I pull the branch where Mr. Peter had pushed changes after reviewing and modifying the code. I then review the changes and notice many amendments had been made, such as moving the transfer repositories to a new “Transfer” folder, modifying some schemas and naming conventions, updating the item quantities repositories, reorganizing the logic, and including assertions for item quantities and transfer transactions. Soon after, I check the task list which announced the changes and listed tasks to continue. Initially, I try to understand the new schema and updates while resolving the errors and mistakes. After that, I continue refining and updating the transfer transaction. Moreover, during a discussion with Mr. Peter, I was instructed to create more DTOs for the GET API method instead of retrieving the entire schema. We also discussed how to implement search and filter functionality to get specific transfer lists by adding the IsPending schema which allow users to view the list of stocks to work on based on their store identity. Additionally, we discussed the stock command for the work flow process. Thus, more requirements were outlined for me to complete before the end of my internship.
Additionally, following the final discussions, I initially build the relevant code for stock such as commands, services, tests and controllers. This feature was relatively simple to implement, so I quickly complete it and move to testing by initializing more data. After the tests pass successfully, I start creating the transfer order query. Initially, I create queries such as byId, byList, and byNo along with their respective DTOs. Later, I update the byList query to include a search and filter body. Then, I create the mapping profile so users could retrieve the required data values. I also develop the repository for byList and include builders for filtering. However, I encountered difficulties testing queries containing ObjectId data, as the ObjectId could not be converted into a string for reading. Initially, I attempted to add a JsonConverter for ObjectId under the DTO schema, but it was incorrect. Eventually, through persistent effort and seeking advice, I successfully resolve the issue by adding JsonSerializerSettings with an ObjectIdConverter while deserializing string responses. Once the three queries tests succeed, I move on to the IsPending query for the query List. I create a similar query and DTO with its mapping profile. Meanwhile, Mr. Peter reviewed my work and recommended using consistent search and filter logic for builders with the AND gate. Later, we discussed the IsPending statuses, which were allocated under the line item to filter the transfer orders associated with specific line items to be issued. After understanding the new implementation, I commit and push my changes.
Moreover, I pull the branch with additional modifications by Mr. Peter. I review again the changes and check the new tasks and questions on task lists. Mr. Peter mentioned that I hadn’t revert unnecessary changes, especially in the controllers before committing or pushing. There were also other questions and tasks to address the mistakes. After reviewing the changes, I resolve the errors and continue working on the issue list. Filtering the line item data to retrieve the necessary line item for issuing took several hours to succeed. While struggling with this query, I move on to creating the transfer DO query. The process was similar to creating transfer order queries including DTOs, profiles, tests and repositories, which all worked fine. Soon, I discovered a new requirement for a receive list, where users receive orders based on the retail stores. The list also filtered by IsPending which similar to the previous query list.
Additionally, I seek advice and explore ChatGPT for solutions to unit tests. Finally, I found a way to filter the list collection further to identify specific line items. Subsequently, the query tests for both query lists passed as expected. Following that, I update the services by adding the schema and update the tests to include IsPending flags. Once all tests passed, I create the query for the receive list, similar to the query lists and ensure its tests passed as well. In a discussion with Mr. Peter, I was informed that only a few tasks remained, including DO, receive update and receive delete. I aim to complete these by my last day and I push my work accordingly.
On my last day, I focus on refining DO, receive update, and receive delete services. I test the transfer receive queries while initializing additional data for update and delete tests. After successfully testing the DO, I update transfer tests by including the data with IsPending flags to align with the schema. Besides that, I also update the transfer tests by adding assertions for them as well. While working on deletion tests, I encounter issues related to item, I try to debug it but still unsure about the errors. Concurrently, my colleague, Jay inquired about unexpected responses in the query DTO for stores and users. I explain that the query DTO was partially completed and then updated the query, DTO, profile and search repository methods. These changes were tested successfully. Despite accomplishing significant tasks, I couldn’t complete all tests for updates and deletions by the end of the day, leaving me with a slight sense of unfulfillment. Nevertheless, I commit and push my work to the branch, marking the end of my internship at Tong Hin.
Conclusion
As I conclude my internship at Tong Hin, I feel a profound sense of growth and accomplishment. Over the past 13 weeks, I navigate through various technical challenges, deepened my understanding of software development practices, and enhanced my problem-solving abilities. The hands-on experience of working with complex schemas, developing queries, and implementing real-world solutions broadened my technical expertise and prepared me for future endeavors. Working under the guidance of Mr. Peter and collaborating with colleagues helped me develop stronger communication and teamwork skills.
However, this journey wasn’t without its challenges. Struggling to resolve errors, facing technical roadblocks, and balancing multiple tasks were often daunting. But these obstacles pushed me to explore innovative solutions, utilize resources and improve my resilience. While I didn’t manage to complete all tasks by the final day, the experience motivated me to strive for better time management and efficiency in future projects. Reflecting on my internship, I feel immensely grateful for this opportunity. It was a period of continuous learning, self-improvement and achievement. Though it is bittersweet to leave unfinished tasks, I am proud of the progress I made and the skills I acquired during this journey. Thank you to Tong Hin, Mr. Peter, and my colleagues for making this a transformative and enriching experience.
