All files / external/fitbit/nutrition common.ts

100% Statements 4/4
100% Branches 0/0
100% Functions 0/0
100% Lines 4/4

Press n or j to go to the next uncovered block, b, p or k for the previous block.

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 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76                                        3x                                 3x                                   3x                             3x          
import { z } from "zod";
 
/**
 * @file Fitbit Nutrition APIで共通利用される栄養素関連の型定義です。
 * @module shared/external/fitbit/nutrition/common
 *
 * @description
 * このファイルは、Fitbitの食品登録や食事ログで使用される栄養素フィールドをZodスキーマとして定義します。
 * 栄養素は「一般的な栄養素」「ビタミン」「ミネラル」の3つのカテゴリに分類され、
 * `allNutritionFields` ですべてがマージされます。
 *
 * 各フィールドはオプションかつ非負数(`nonnegative().optional()`)として定義されており、
 * データが不足している場合でも柔軟に扱えるようになっています。
 * コメントにはFitbit APIで想定されている単位(g, mg, IUなど)を記載しています。
 */
 
/**
 * 食品に含まれる一般的な栄養素のZodスキーマ定義です。
 * 脂質、炭水化物、タンパク質などが含まれます。
 */
export const commonNutritionFields = {
  caloriesFromFat: z.number().nonnegative().optional(),
  totalFat: z.number().nonnegative().optional(), // g
  transFat: z.number().nonnegative().optional(), // g
  saturatedFat: z.number().nonnegative().optional(), // g
  cholesterol: z.number().nonnegative().optional(), // mg
  sodium: z.number().nonnegative().optional(), // mg
  potassium: z.number().nonnegative().optional(), // mg
  totalCarbohydrate: z.number().nonnegative().optional(), // g
  dietaryFiber: z.number().nonnegative().optional(), // g
  sugars: z.number().nonnegative().optional(), // g
  protein: z.number().nonnegative().optional(), // g
};
 
/**
 * 食品に含まれるビタミン類のZodスキーマ定義です。
 */
export const vitaminFields = {
  vitaminA: z.number().nonnegative().optional(), // IU
  vitaminB6: z.number().nonnegative().optional(),
  vitaminB12: z.number().nonnegative().optional(),
  vitaminC: z.number().nonnegative().optional(), // mg
  vitaminD: z.number().nonnegative().optional(), // IU
  vitaminE: z.number().nonnegative().optional(), // IU
  biotin: z.number().nonnegative().optional(), // mg
  folicAcid: z.number().nonnegative().optional(), // mg
  niacin: z.number().nonnegative().optional(), // mg
  pantothenicAcid: z.number().nonnegative().optional(), // mg
  riboflavin: z.number().nonnegative().optional(), // mg
  thiamin: z.number().nonnegative().optional(), // mg
};
 
/**
 * 食品に含まれるミネラル類のZodスキーマ定義です。
 */
export const mineralFields = {
  calcium: z.number().nonnegative().optional(), // g
  copper: z.number().nonnegative().optional(), // g
  iron: z.number().nonnegative().optional(), // mg
  magnesium: z.number().nonnegative().optional(), // mg
  phosphorus: z.number().nonnegative().optional(), // g
  iodine: z.number().nonnegative().optional(), // mcg
  zinc: z.number().nonnegative().optional(), // mg
};
 
/**
 * `commonNutritionFields`, `vitaminFields`, `mineralFields` をすべて結合した、
 * 包括的な栄養素スキーマ定義です。
 * これにより、Fitbit APIでサポートされるすべての栄養素フィールドを一度に扱うことができます。
 */
export const allNutritionFields = {
  ...commonNutritionFields,
  ...vitaminFields,
  ...mineralFields,
};