using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
using ChatworkBulkSender.Utils;
namespace ChatworkBulkSender.Utils
{
/// <summary>
/// バリデーション処理の共通定義静的クラス
/// </summary>
public static class ValidationHelperUtil
{
/// <summary>
/// APIトークンの形式をチェック
/// </summary>
/// <param name="apiToken">APIトークン</param>
/// <returns>有効な形式の場合true</returns>
public static bool IsValidApiToken(string apiToken)
{
if (string.IsNullOrEmpty(apiToken))
return false;
// 32文字の16進数形式(小文字)
return Regex.IsMatch(apiToken, Constants.API_TOKEN_PATTERN);
}
/// <summary>
/// ルームIDの形式をチェック
/// </summary>
/// <param name="roomId">ルームID</param>
/// <returns>有効な形式の場合true</returns>
public static bool IsValidRoomId(string roomId)
{
if (string.IsNullOrEmpty(roomId))
return false;
// 1〜10桁の数値
return Regex.IsMatch(roomId, Constants.ROOM_ID_PATTERN);
}
/// <summary>
/// アカウントIDの形式をチェック
/// </summary>
/// <param name="accountId">アカウントID</param>
/// <returns>有効な形式の場合true</returns>
public static bool IsValidAccountId(string accountId)
{
if (string.IsNullOrEmpty(accountId))
return false;
// 1〜10桁の数値
return Regex.IsMatch(accountId, Constants.ACCOUNT_ID_PATTERN);
}
/// <summary>
/// 文字数チェック用のエラーメッセージを生成
/// </summary>
/// <param name="fieldName">フィールド名</param>
/// <param name="currentLength">現在の文字数</param>
/// <param name="maxLength">最大文字数</param>
/// <returns>エラーメッセージ</returns>
public static string GetLengthErrorMessage(string fieldName, int currentLength, int maxLength)
{
return $"{fieldName}は{maxLength}文字以内で入力してください。(現在:{currentLength}文字)";
}
/// <summary>
/// APIトークンの形式エラーメッセージを取得
/// </summary>
/// <returns>エラーメッセージ</returns>
public static string GetApiTokenFormatErrorMessage()
{
return "APIトークンは32文字の16進数(0-9, a-f)で入力してください。";
}
/// <summary>
/// ルームIDの形式エラーメッセージを取得
/// </summary>
/// <param name="fieldName">フィールド名(「ルームID」または「テストルームID」など)</param>
/// <returns>エラーメッセージ</returns>
public static string GetRoomIdFormatErrorMessage(string fieldName)
{
return $"{fieldName}は20桁以内の数値で入力してください。";
}
/// <summary>
/// アカウントIDの形式エラーメッセージを取得
/// </summary>
/// <param name="fieldName">フィールド名(「宛先アカウントID」など)</param>
/// <returns>エラーメッセージ</returns>
public static string GetAccountIdFormatErrorMessage(string fieldName)
{
return $"{fieldName}は20桁以内の数値で入力してください。";
}
/// <summary>
/// カンマ区切りのアカウントIDリストを検証
/// </summary>
/// <param name="accountIds">カンマ区切りのアカウントID</param>
/// <param name="invalidIds">無効なIDのリスト(出力)</param>
/// <returns>すべて有効な場合true</returns>
public static bool ValidateAccountIdList(string accountIds, out string[] invalidIds)
{
invalidIds = null;
if (string.IsNullOrWhiteSpace(accountIds))
return true; // 空の場合は有効とする
var ids = accountIds.Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries);
var invalidList = new System.Collections.Generic.List<string>();
foreach (var id in ids)
{
var trimmedId = id.Trim();
if (!IsValidAccountId(trimmedId))
{
invalidList.Add(trimmedId);
}
}
if (invalidList.Count > 0)
{
invalidIds = invalidList.ToArray();
return false;
}
return true;
}
}
}