From 39c44f2affb6e1cb5e664e7dd11d75e3476c3d88 Mon Sep 17 00:00:00 2001 From: Moley-Bot Date: Wed, 21 Jan 2026 10:32:49 +0000 Subject: [PATCH 1/3] Add collector for NorthTynesideCouncil Closes #101 Generated with Codex CLI by Moley-Bot --- .../Councils/NorthTynesideCouncil.cs | 278 ++++++++++++++++++ .../Councils/NorthTynesideCouncilTests.cs | 36 +++ 2 files changed, 314 insertions(+) create mode 100644 BinDays.Api.Collectors/Collectors/Councils/NorthTynesideCouncil.cs create mode 100644 BinDays.Api.IntegrationTests/Collectors/Councils/NorthTynesideCouncilTests.cs diff --git a/BinDays.Api.Collectors/Collectors/Councils/NorthTynesideCouncil.cs b/BinDays.Api.Collectors/Collectors/Councils/NorthTynesideCouncil.cs new file mode 100644 index 0000000..7b7d963 --- /dev/null +++ b/BinDays.Api.Collectors/Collectors/Councils/NorthTynesideCouncil.cs @@ -0,0 +1,278 @@ +namespace BinDays.Api.Collectors.Collectors.Councils; + +using BinDays.Api.Collectors.Collectors.Vendors; +using BinDays.Api.Collectors.Models; +using BinDays.Api.Collectors.Utilities; +using System; +using System.Collections.Generic; +using System.Globalization; +using System.Text.RegularExpressions; + +/// +/// Collector implementation for North Tyneside Council. +/// +internal sealed partial class NorthTynesideCouncil : GovUkCollectorBase, ICollector +{ + /// + public string Name => "North Tyneside Council"; + + /// + public Uri WebsiteUrl => new("https://www.northtyneside.gov.uk/"); + + /// + public override string GovUkId => "north-tyneside"; + + /// + /// The list of bin types for this collector. + /// + private readonly IReadOnlyCollection _binTypes = + [ + new() + { + Name = "Household Waste", + Colour = BinColour.Green, + Keys = [ "Household", "General Waste" ], + }, + new() + { + Name = "Mixed Recycling", + Colour = BinColour.Grey, + Keys = [ "Recycling" ], + }, + new() + { + Name = "Garden Waste", + Colour = BinColour.Brown, + Keys = [ "Garden" ], + }, + ]; + + /// + /// Regex for the form build id. + /// + [GeneratedRegex(@"name=""form_build_id""\s+value=""(?[^""]+)""")] + private static partial Regex FormBuildIdRegex(); + + /// + /// Regex for the addresses from the data. + /// + [GeneratedRegex(@"