Skip to main content

Import Data User Profiles Documentation

This code provides a function to import user profile data into an ImportDataStruct. It processes user profiles and their calendar schedules to populate the import data structure with shifts for each day of a specified month and year.

ImportDataUserProfiles Function

Function Signature

func ImportDataUserProfiles(importData *entity.ImportDataStruct, userProfiles []entity.UserProfileTable, cache *caching.AllCacheStruct)

Parameters

  • importData *entity.ImportDataStruct: A pointer to an ImportDataStruct where the imported data will be stored.
  • userProfiles []entity.UserProfileTable: A slice of UserProfileTable structs representing the user profiles to be imported.
  • cache *caching.AllCacheStruct: A pointer to an AllCacheStruct containing cached data for users, shifts, and calendar schedules.

Description

The ImportDataUserProfiles function imports user profile data into an ImportDataStruct. It processes each user profile, retrieves their calendar schedules, and populates the import data structure with shifts for each day of the specified month and year.

Steps

  1. Get Month and Year: Retrieve the month and year from the ImportDataStruct.
  2. Loop Through User Profiles: For each user profile:
    • Create a new ImportDataUser struct.
    • Find the current user by their custom ID in the cache.
    • Initialize shifts for each day of the month.
    • For each day:
      • Format the date as yyyy-mm-dd.
      • Find the calendar schedule for the user on that date.
      • If a calendar schedule is found:
        • If there are no schedule details, append an empty shift.
        • For each schedule detail, get the shift by ID and append it to the shift list.
        • Append the shift list to the user's shifts.
      • If no calendar schedule is found, append an empty shift.
    • Append the user to the import data.

Example Usage

package main

import (
"fio-backend/entity"
"fio-backend/utils/caching"
"fio-backend/utils/compute"
"fmt"
)

func main() {
// Create a sample ImportDataStruct
importData := &entity.ImportDataStruct{
Month: 5,
Year: 2024,
}

// Create sample user profiles
userProfiles := []entity.UserProfileTable{
{
CustomID: "user_123",
FullName: "John Doe",
},
{
CustomID: "user_456",
FullName: "Jane Smith",
},
}

// Create a sample cache
cache := &caching.AllCacheStruct{
Users: &caching.LocalUsers{
UserProfilesByCustomID: map[string]*entity.UserProfileTable{
"user_123": &userProfiles[0],
"user_456": &userProfiles[1],
},
},
CalendarSchedules: &caching.LocalCalendarSchedule{
CalendarSchedulesByPerson: map[string]map[string][]*entity.CalendarScheduleTable{
"user_123": {
"2024-05-01": {
&entity.CalendarScheduleTable{
IsAutoShift: true,
CalendarScheduleDetails: []entity.CalendarScheduleDetailsTable{
{
ShiftID: "shift_1",
},
},
},
},
},
"user_456": {
"2024-05-01": {
&entity.CalendarScheduleTable{
IsAutoShift: false,
CalendarScheduleDetails: []entity.CalendarScheduleDetailsTable{
{
ShiftID: "shift_2",
},
},
},
},
},
},
},
Shifts: &caching.LocalShifts{
IndexedShifts: map[string]*entity.ShiftTable{
"shift_1": {
ShortLabel: "Morning Shift",
},
"shift_2": {
ShortLabel: "Evening Shift",
},
},
},
}

// Import user profiles into the import data structure
compute.ImportDataUserProfiles(importData, userProfiles, cache)

// Print the imported data
for _, user := range importData.Data {
fmt.Printf("User: %s, Shifts: %+v\n", user.Name, user.Shifts)
}
}

Improvements and Considerations

  • Error Handling: Improve error handling by returning errors instead of just logging them.
  • Code Clarity and Comments: Improve code comments to explain complex logic more clearly.
  • Unit Tests: Add unit tests to ensure the function works correctly with various inputs and edge cases.
  • Performance Optimization: Optimize the function for performance, especially when processing large numbers of user profiles and calendar schedules.
  • Modularization: Break down the function into smaller, more modular functions to improve readability and maintainability.

This comprehensive documentation provides a detailed understanding of the ImportDataUserProfiles function and its functionalities. By addressing the suggested improvements, you can create a more robust and maintainable solution for importing user profile data into an ImportDataStruct.