From 99644b2d1ff7c0dce240328bd938ca1592fd4323 Mon Sep 17 00:00:00 2001 From: Mukul Palol Date: Wed, 25 Oct 2023 15:42:46 +0530 Subject: [PATCH 1/5] added EmailCarbonFootprint assignment --- .../EmailCarbonFootprint.sln | 25 +++++++++++++++ .../CarbonFootprintCalculator.cs | 20 ++++++++++++ .../EmailCarbonFootprint.csproj | 10 ++++++ .../EmailCarbonFootprint/EmailModel.cs | 18 +++++++++++ .../EmailCarbonFootprint/EmailTypeQuantity.cs | 11 +++++++ .../EmailCarbonFootprint/EmissionsData.cs | 26 ++++++++++++++++ .../EmailCarbonFootprint/Program.cs | 31 +++++++++++++++++++ EmailCarbonFootprintAssignment/README.md | 0 8 files changed, 141 insertions(+) create mode 100644 EmailCarbonFootprintAssignment/EmailCarbonFootprint/EmailCarbonFootprint.sln create mode 100644 EmailCarbonFootprintAssignment/EmailCarbonFootprint/EmailCarbonFootprint/CarbonFootprintCalculator.cs create mode 100644 EmailCarbonFootprintAssignment/EmailCarbonFootprint/EmailCarbonFootprint/EmailCarbonFootprint.csproj create mode 100644 EmailCarbonFootprintAssignment/EmailCarbonFootprint/EmailCarbonFootprint/EmailModel.cs create mode 100644 EmailCarbonFootprintAssignment/EmailCarbonFootprint/EmailCarbonFootprint/EmailTypeQuantity.cs create mode 100644 EmailCarbonFootprintAssignment/EmailCarbonFootprint/EmailCarbonFootprint/EmissionsData.cs create mode 100644 EmailCarbonFootprintAssignment/EmailCarbonFootprint/EmailCarbonFootprint/Program.cs create mode 100644 EmailCarbonFootprintAssignment/README.md diff --git a/EmailCarbonFootprintAssignment/EmailCarbonFootprint/EmailCarbonFootprint.sln b/EmailCarbonFootprintAssignment/EmailCarbonFootprint/EmailCarbonFootprint.sln new file mode 100644 index 0000000..afc981f --- /dev/null +++ b/EmailCarbonFootprintAssignment/EmailCarbonFootprint/EmailCarbonFootprint.sln @@ -0,0 +1,25 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 17 +VisualStudioVersion = 17.7.34202.233 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "EmailCarbonFootprint", "EmailCarbonFootprint\EmailCarbonFootprint.csproj", "{73E2AAE6-AF74-4FFD-ADAA-256EF3455E7C}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {73E2AAE6-AF74-4FFD-ADAA-256EF3455E7C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {73E2AAE6-AF74-4FFD-ADAA-256EF3455E7C}.Debug|Any CPU.Build.0 = Debug|Any CPU + {73E2AAE6-AF74-4FFD-ADAA-256EF3455E7C}.Release|Any CPU.ActiveCfg = Release|Any CPU + {73E2AAE6-AF74-4FFD-ADAA-256EF3455E7C}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {1872402B-491D-4E69-9BFF-8EAA5BFE7F64} + EndGlobalSection +EndGlobal diff --git a/EmailCarbonFootprintAssignment/EmailCarbonFootprint/EmailCarbonFootprint/CarbonFootprintCalculator.cs b/EmailCarbonFootprintAssignment/EmailCarbonFootprint/EmailCarbonFootprint/CarbonFootprintCalculator.cs new file mode 100644 index 0000000..b660db2 --- /dev/null +++ b/EmailCarbonFootprintAssignment/EmailCarbonFootprint/EmailCarbonFootprint/CarbonFootprintCalculator.cs @@ -0,0 +1,20 @@ +namespace EmailCarbonFootprint +{ + public class CarbonFootprintCalculator + { + public EmailModel CalculateCarbonFootprint(EmailModel email) + { + EmissionsData emissionsData = new EmissionsData(); + emissionsData.SpamCarbonFootprintKg = (email.SpamQuantity * EmissionsData.SpamEmission) / 1000; + emissionsData.ShortEmailOnPhoneCarbonFootprintKg = (email.ShortEmailOnPhoneQuantity * EmissionsData.ShortEmailOnPhoneEmission) / 1000; + emissionsData.ShortEmailInLaptopCarbonFootprintKg = (email.ShortEmailOnLaptopQuantity * EmissionsData.ShortEmailOnLaptopEmission) / 1000; + emissionsData.LongEmailOnLaptopCarbonFootprintKg = (email.LongEmailOnLaptopQuantity * EmissionsData.LongEmailOnLaptopEmission) / 1000; + emissionsData.EmailBlastCarbonFootprintKg = (email.EmailBlastQuantity * EmissionsData.EmailBlastEmission) / 1000; + + email.CarbonFootprintKg = emissionsData.SpamCarbonFootprintKg + emissionsData.ShortEmailInLaptopCarbonFootprintKg + emissionsData.ShortEmailOnPhoneCarbonFootprintKg + emissionsData.LongEmailOnLaptopCarbonFootprintKg + emissionsData.EmailBlastCarbonFootprintKg; + email.EmissionsData = emissionsData; + return email; + } + } + +} diff --git a/EmailCarbonFootprintAssignment/EmailCarbonFootprint/EmailCarbonFootprint/EmailCarbonFootprint.csproj b/EmailCarbonFootprintAssignment/EmailCarbonFootprint/EmailCarbonFootprint/EmailCarbonFootprint.csproj new file mode 100644 index 0000000..74abf5c --- /dev/null +++ b/EmailCarbonFootprintAssignment/EmailCarbonFootprint/EmailCarbonFootprint/EmailCarbonFootprint.csproj @@ -0,0 +1,10 @@ + + + + Exe + net6.0 + enable + enable + + + diff --git a/EmailCarbonFootprintAssignment/EmailCarbonFootprint/EmailCarbonFootprint/EmailModel.cs b/EmailCarbonFootprintAssignment/EmailCarbonFootprint/EmailCarbonFootprint/EmailModel.cs new file mode 100644 index 0000000..49075ad --- /dev/null +++ b/EmailCarbonFootprintAssignment/EmailCarbonFootprint/EmailCarbonFootprint/EmailModel.cs @@ -0,0 +1,18 @@ +namespace EmailCarbonFootprint +{ + public class EmailModel : EmailTypeQuantity + { + public string EmailId { get; set; } + public double CarbonFootprintKg { get; set; } + public EmissionsData EmissionsData { get; set; } + + public void DisplayEmailCarbonFootprint() + { + Console.WriteLine("Total Carbon Footprint"); + Console.WriteLine($"Email Id: {EmailId}"); + EmissionsData.DisplayCarbonEmission(); + Console.WriteLine($"Carbon Footprint: {CarbonFootprintKg} kg"); + } + } + +} diff --git a/EmailCarbonFootprintAssignment/EmailCarbonFootprint/EmailCarbonFootprint/EmailTypeQuantity.cs b/EmailCarbonFootprintAssignment/EmailCarbonFootprint/EmailCarbonFootprint/EmailTypeQuantity.cs new file mode 100644 index 0000000..5f89975 --- /dev/null +++ b/EmailCarbonFootprintAssignment/EmailCarbonFootprint/EmailCarbonFootprint/EmailTypeQuantity.cs @@ -0,0 +1,11 @@ +namespace EmailCarbonFootprint +{ + public class EmailTypeQuantity + { + public int SpamQuantity { get; set; } + public int ShortEmailOnPhoneQuantity { get; set; } + public int ShortEmailOnLaptopQuantity { get; set; } + public int LongEmailOnLaptopQuantity { get; set; } + public int EmailBlastQuantity { get; set; } + } +} diff --git a/EmailCarbonFootprintAssignment/EmailCarbonFootprint/EmailCarbonFootprint/EmissionsData.cs b/EmailCarbonFootprintAssignment/EmailCarbonFootprint/EmailCarbonFootprint/EmissionsData.cs new file mode 100644 index 0000000..b1db627 --- /dev/null +++ b/EmailCarbonFootprintAssignment/EmailCarbonFootprint/EmailCarbonFootprint/EmissionsData.cs @@ -0,0 +1,26 @@ +namespace EmailCarbonFootprint +{ + public class EmissionsData + { + public double SpamCarbonFootprintKg { get; set; } + public double ShortEmailOnPhoneCarbonFootprintKg { get; set; } + public double ShortEmailInLaptopCarbonFootprintKg { get; set; } + public double LongEmailOnLaptopCarbonFootprintKg { get; set; } + public double EmailBlastCarbonFootprintKg { get; set; } + + public void DisplayCarbonEmission() + { + Console.WriteLine($"Carbon footprint of spam emails: {SpamCarbonFootprintKg} kg"); + Console.WriteLine($"Carbon footprint of short emails sent on phone: {ShortEmailOnPhoneCarbonFootprintKg} kg"); + Console.WriteLine($"Carbon footprint of short emails sent on laptop: {ShortEmailInLaptopCarbonFootprintKg} kg"); + Console.WriteLine($"Carbon footprint of long emails sent on laptop: {LongEmailOnLaptopCarbonFootprintKg} kg"); + Console.WriteLine($"Carbon footprint of email blasts: {EmailBlastCarbonFootprintKg} kg"); + } + + public static double SpamEmission = 0.03; + public static double ShortEmailOnPhoneEmission = 0.2; + public static double ShortEmailOnLaptopEmission = 0.3; + public static double LongEmailOnLaptopEmission = 17; + public static double EmailBlastEmission = 26; + } +} diff --git a/EmailCarbonFootprintAssignment/EmailCarbonFootprint/EmailCarbonFootprint/Program.cs b/EmailCarbonFootprintAssignment/EmailCarbonFootprint/EmailCarbonFootprint/Program.cs new file mode 100644 index 0000000..a88e9a5 --- /dev/null +++ b/EmailCarbonFootprintAssignment/EmailCarbonFootprint/EmailCarbonFootprint/Program.cs @@ -0,0 +1,31 @@ +namespace EmailCarbonFootprint +{ + internal class Program + { + static void Main(string[] args) + { + try + { + var email = new EmailModel + { + EmailId = "abc@xyz.com", + SpamQuantity = 10, + ShortEmailOnLaptopQuantity = 10, + ShortEmailOnPhoneQuantity = 10, + LongEmailOnLaptopQuantity = 10, + EmailBlastQuantity = 10 + }; + + var calculator = new CarbonFootprintCalculator(); + var result = calculator.CalculateCarbonFootprint(email); + result.DisplayEmailCarbonFootprint(); + + Console.ReadLine(); + } + catch (Exception ex) + { + Console.WriteLine(ex.ToString()); + } + } + } +} \ No newline at end of file diff --git a/EmailCarbonFootprintAssignment/README.md b/EmailCarbonFootprintAssignment/README.md new file mode 100644 index 0000000..e69de29 From 704db5ec502577f9ee94acb862be372d603b6a32 Mon Sep 17 00:00:00 2001 From: Mukul Palol Date: Wed, 25 Oct 2023 16:14:39 +0530 Subject: [PATCH 2/5] separated constants details --- .../EmailCarbonFootprint.sln | 0 .../EmailCarbonFootprint/CarbonFootprintCalculator.cs | 11 +++++------ .../EmailCarbonFootprint/EmailCarbonFootprint.csproj | 0 .../EmailCarbonFootprint/EmailModel.cs | 0 .../EmailCarbonFootprint/EmailTypeQuantity.cs | 0 .../EmailCarbonFootprint/EmissionsData.cs | 8 +------- .../EmailCarbonFootprint/EmissionsDataConstants.cs | 11 +++++++++++ .../EmailCarbonFootprint/Program.cs | 0 EmailCarbonFootprintAssignment/README.md | 0 9 files changed, 17 insertions(+), 13 deletions(-) rename {EmailCarbonFootprintAssignment/EmailCarbonFootprint => EmailCarbonFootprint}/EmailCarbonFootprint.sln (100%) rename {EmailCarbonFootprintAssignment/EmailCarbonFootprint => EmailCarbonFootprint}/EmailCarbonFootprint/CarbonFootprintCalculator.cs (69%) rename {EmailCarbonFootprintAssignment/EmailCarbonFootprint => EmailCarbonFootprint}/EmailCarbonFootprint/EmailCarbonFootprint.csproj (100%) rename {EmailCarbonFootprintAssignment/EmailCarbonFootprint => EmailCarbonFootprint}/EmailCarbonFootprint/EmailModel.cs (100%) rename {EmailCarbonFootprintAssignment/EmailCarbonFootprint => EmailCarbonFootprint}/EmailCarbonFootprint/EmailTypeQuantity.cs (100%) rename {EmailCarbonFootprintAssignment/EmailCarbonFootprint => EmailCarbonFootprint}/EmailCarbonFootprint/EmissionsData.cs (77%) create mode 100644 EmailCarbonFootprint/EmailCarbonFootprint/EmissionsDataConstants.cs rename {EmailCarbonFootprintAssignment/EmailCarbonFootprint => EmailCarbonFootprint}/EmailCarbonFootprint/Program.cs (100%) delete mode 100644 EmailCarbonFootprintAssignment/README.md diff --git a/EmailCarbonFootprintAssignment/EmailCarbonFootprint/EmailCarbonFootprint.sln b/EmailCarbonFootprint/EmailCarbonFootprint.sln similarity index 100% rename from EmailCarbonFootprintAssignment/EmailCarbonFootprint/EmailCarbonFootprint.sln rename to EmailCarbonFootprint/EmailCarbonFootprint.sln diff --git a/EmailCarbonFootprintAssignment/EmailCarbonFootprint/EmailCarbonFootprint/CarbonFootprintCalculator.cs b/EmailCarbonFootprint/EmailCarbonFootprint/CarbonFootprintCalculator.cs similarity index 69% rename from EmailCarbonFootprintAssignment/EmailCarbonFootprint/EmailCarbonFootprint/CarbonFootprintCalculator.cs rename to EmailCarbonFootprint/EmailCarbonFootprint/CarbonFootprintCalculator.cs index b660db2..0e0f4b7 100644 --- a/EmailCarbonFootprintAssignment/EmailCarbonFootprint/EmailCarbonFootprint/CarbonFootprintCalculator.cs +++ b/EmailCarbonFootprint/EmailCarbonFootprint/CarbonFootprintCalculator.cs @@ -5,16 +5,15 @@ public class CarbonFootprintCalculator public EmailModel CalculateCarbonFootprint(EmailModel email) { EmissionsData emissionsData = new EmissionsData(); - emissionsData.SpamCarbonFootprintKg = (email.SpamQuantity * EmissionsData.SpamEmission) / 1000; - emissionsData.ShortEmailOnPhoneCarbonFootprintKg = (email.ShortEmailOnPhoneQuantity * EmissionsData.ShortEmailOnPhoneEmission) / 1000; - emissionsData.ShortEmailInLaptopCarbonFootprintKg = (email.ShortEmailOnLaptopQuantity * EmissionsData.ShortEmailOnLaptopEmission) / 1000; - emissionsData.LongEmailOnLaptopCarbonFootprintKg = (email.LongEmailOnLaptopQuantity * EmissionsData.LongEmailOnLaptopEmission) / 1000; - emissionsData.EmailBlastCarbonFootprintKg = (email.EmailBlastQuantity * EmissionsData.EmailBlastEmission) / 1000; + emissionsData.SpamCarbonFootprintKg = (email.SpamQuantity * EmissionsDataConstants.SpamEmission) / 1000; + emissionsData.ShortEmailOnPhoneCarbonFootprintKg = (email.ShortEmailOnPhoneQuantity * EmissionsDataConstants.ShortEmailOnPhoneEmission) / 1000; + emissionsData.ShortEmailInLaptopCarbonFootprintKg = (email.ShortEmailOnLaptopQuantity * EmissionsDataConstants.ShortEmailOnLaptopEmission) / 1000; + emissionsData.LongEmailOnLaptopCarbonFootprintKg = (email.LongEmailOnLaptopQuantity * EmissionsDataConstants.LongEmailOnLaptopEmission) / 1000; + emissionsData.EmailBlastCarbonFootprintKg = (email.EmailBlastQuantity * EmissionsDataConstants.EmailBlastEmission) / 1000; email.CarbonFootprintKg = emissionsData.SpamCarbonFootprintKg + emissionsData.ShortEmailInLaptopCarbonFootprintKg + emissionsData.ShortEmailOnPhoneCarbonFootprintKg + emissionsData.LongEmailOnLaptopCarbonFootprintKg + emissionsData.EmailBlastCarbonFootprintKg; email.EmissionsData = emissionsData; return email; } } - } diff --git a/EmailCarbonFootprintAssignment/EmailCarbonFootprint/EmailCarbonFootprint/EmailCarbonFootprint.csproj b/EmailCarbonFootprint/EmailCarbonFootprint/EmailCarbonFootprint.csproj similarity index 100% rename from EmailCarbonFootprintAssignment/EmailCarbonFootprint/EmailCarbonFootprint/EmailCarbonFootprint.csproj rename to EmailCarbonFootprint/EmailCarbonFootprint/EmailCarbonFootprint.csproj diff --git a/EmailCarbonFootprintAssignment/EmailCarbonFootprint/EmailCarbonFootprint/EmailModel.cs b/EmailCarbonFootprint/EmailCarbonFootprint/EmailModel.cs similarity index 100% rename from EmailCarbonFootprintAssignment/EmailCarbonFootprint/EmailCarbonFootprint/EmailModel.cs rename to EmailCarbonFootprint/EmailCarbonFootprint/EmailModel.cs diff --git a/EmailCarbonFootprintAssignment/EmailCarbonFootprint/EmailCarbonFootprint/EmailTypeQuantity.cs b/EmailCarbonFootprint/EmailCarbonFootprint/EmailTypeQuantity.cs similarity index 100% rename from EmailCarbonFootprintAssignment/EmailCarbonFootprint/EmailCarbonFootprint/EmailTypeQuantity.cs rename to EmailCarbonFootprint/EmailCarbonFootprint/EmailTypeQuantity.cs diff --git a/EmailCarbonFootprintAssignment/EmailCarbonFootprint/EmailCarbonFootprint/EmissionsData.cs b/EmailCarbonFootprint/EmailCarbonFootprint/EmissionsData.cs similarity index 77% rename from EmailCarbonFootprintAssignment/EmailCarbonFootprint/EmailCarbonFootprint/EmissionsData.cs rename to EmailCarbonFootprint/EmailCarbonFootprint/EmissionsData.cs index b1db627..231ba47 100644 --- a/EmailCarbonFootprintAssignment/EmailCarbonFootprint/EmailCarbonFootprint/EmissionsData.cs +++ b/EmailCarbonFootprint/EmailCarbonFootprint/EmissionsData.cs @@ -15,12 +15,6 @@ public void DisplayCarbonEmission() Console.WriteLine($"Carbon footprint of short emails sent on laptop: {ShortEmailInLaptopCarbonFootprintKg} kg"); Console.WriteLine($"Carbon footprint of long emails sent on laptop: {LongEmailOnLaptopCarbonFootprintKg} kg"); Console.WriteLine($"Carbon footprint of email blasts: {EmailBlastCarbonFootprintKg} kg"); - } - - public static double SpamEmission = 0.03; - public static double ShortEmailOnPhoneEmission = 0.2; - public static double ShortEmailOnLaptopEmission = 0.3; - public static double LongEmailOnLaptopEmission = 17; - public static double EmailBlastEmission = 26; + } } } diff --git a/EmailCarbonFootprint/EmailCarbonFootprint/EmissionsDataConstants.cs b/EmailCarbonFootprint/EmailCarbonFootprint/EmissionsDataConstants.cs new file mode 100644 index 0000000..b86b1e0 --- /dev/null +++ b/EmailCarbonFootprint/EmailCarbonFootprint/EmissionsDataConstants.cs @@ -0,0 +1,11 @@ +namespace EmailCarbonFootprint +{ + public class EmissionsDataConstants + { + public static double SpamEmission = 0.03; + public static double ShortEmailOnPhoneEmission = 0.2; + public static double ShortEmailOnLaptopEmission = 0.3; + public static double LongEmailOnLaptopEmission = 17; + public static double EmailBlastEmission = 26; + } +} diff --git a/EmailCarbonFootprintAssignment/EmailCarbonFootprint/EmailCarbonFootprint/Program.cs b/EmailCarbonFootprint/EmailCarbonFootprint/Program.cs similarity index 100% rename from EmailCarbonFootprintAssignment/EmailCarbonFootprint/EmailCarbonFootprint/Program.cs rename to EmailCarbonFootprint/EmailCarbonFootprint/Program.cs diff --git a/EmailCarbonFootprintAssignment/README.md b/EmailCarbonFootprintAssignment/README.md deleted file mode 100644 index e69de29..0000000 From 2638d68cef9a1686a8f8f1fb4f78bb7f0fc3d2e5 Mon Sep 17 00:00:00 2001 From: mukulpalol16 <148962875+mukulpalol16@users.noreply.github.com> Date: Wed, 25 Oct 2023 16:23:55 +0530 Subject: [PATCH 3/5] Update README.md --- EmailCarbonFootprint/README.md | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 EmailCarbonFootprint/README.md diff --git a/EmailCarbonFootprint/README.md b/EmailCarbonFootprint/README.md new file mode 100644 index 0000000..127563c --- /dev/null +++ b/EmailCarbonFootprint/README.md @@ -0,0 +1,28 @@ +# Assignment - Find out your Email Carbon Footprint + +### Request +Sudo Code +``` +entityType = ['email','server','something'] +entity = { + email : abc@zyz.com, +} +getCarbonFootprint(entityType, entity){ + //get on the basis of category +} +``` +### Response +``` +email (entityType basis) + emailId : abc@xyz.com + source : gmail/outlook/yahoo + inbox : xyz KG + sent : xyz KG + spam : xyz KG +``` + +### Reference links +- https://carbonliteracy.com/the-carbon-cost-of-an-email/ +- https://carbonliteracy.com/the-carbon-cost-of-an-email-2/ +- https://wndyr.com/blog/popular/if-the-world-stopped-using-email-how-much-electricity-would-we-save +- https://www.mail.com/blog/posts/email-carbon-footprint/9/ From e93f6a1d15c1c5fffa7aaea652a7d388e797e296 Mon Sep 17 00:00:00 2001 From: Mukul Palol Date: Mon, 30 Oct 2023 15:09:24 +0530 Subject: [PATCH 4/5] refactored files --- EmailCarbonFootprint/EmailCarbonFootprint.sln | 14 ++++----- .../CarbonFootprintCalculator.cs | 19 ------------ .../EmailCarbonFootprintCalculator.cs | 24 +++++++++++++++ .../EmailCarbonFootprint/EmailEntity.cs | 30 +++++++++++++++++++ .../EmailEntityResponse.cs | 26 ++++++++++++++++ .../EmailCarbonFootprint/EmailModel.cs | 18 ----------- .../EmailCarbonFootprint/EmailTypeQuantity.cs | 11 ------- .../EmailCarbonFootprint/EmissionsData.cs | 20 ------------- .../EmissionsDataConstants.cs | 11 ------- .../ICarbonFootprintCalculator.cs | 7 +++++ .../EmailCarbonFootprint/Program.cs | 21 +++++-------- 11 files changed, 102 insertions(+), 99 deletions(-) delete mode 100644 EmailCarbonFootprint/EmailCarbonFootprint/CarbonFootprintCalculator.cs create mode 100644 EmailCarbonFootprint/EmailCarbonFootprint/EmailCarbonFootprintCalculator.cs create mode 100644 EmailCarbonFootprint/EmailCarbonFootprint/EmailEntity.cs create mode 100644 EmailCarbonFootprint/EmailCarbonFootprint/EmailEntityResponse.cs delete mode 100644 EmailCarbonFootprint/EmailCarbonFootprint/EmailModel.cs delete mode 100644 EmailCarbonFootprint/EmailCarbonFootprint/EmailTypeQuantity.cs delete mode 100644 EmailCarbonFootprint/EmailCarbonFootprint/EmissionsData.cs delete mode 100644 EmailCarbonFootprint/EmailCarbonFootprint/EmissionsDataConstants.cs create mode 100644 EmailCarbonFootprint/EmailCarbonFootprint/ICarbonFootprintCalculator.cs diff --git a/EmailCarbonFootprint/EmailCarbonFootprint.sln b/EmailCarbonFootprint/EmailCarbonFootprint.sln index afc981f..ca92c50 100644 --- a/EmailCarbonFootprint/EmailCarbonFootprint.sln +++ b/EmailCarbonFootprint/EmailCarbonFootprint.sln @@ -1,9 +1,9 @@  Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 17 -VisualStudioVersion = 17.7.34202.233 +VisualStudioVersion = 17.7.34221.43 MinimumVisualStudioVersion = 10.0.40219.1 -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "EmailCarbonFootprint", "EmailCarbonFootprint\EmailCarbonFootprint.csproj", "{73E2AAE6-AF74-4FFD-ADAA-256EF3455E7C}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "EmailCarbonFootprint", "EmailCarbonFootprint\EmailCarbonFootprint.csproj", "{C3BE6FAC-E6F7-4830-91B4-4041BC00C70C}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution @@ -11,15 +11,15 @@ Global Release|Any CPU = Release|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution - {73E2AAE6-AF74-4FFD-ADAA-256EF3455E7C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {73E2AAE6-AF74-4FFD-ADAA-256EF3455E7C}.Debug|Any CPU.Build.0 = Debug|Any CPU - {73E2AAE6-AF74-4FFD-ADAA-256EF3455E7C}.Release|Any CPU.ActiveCfg = Release|Any CPU - {73E2AAE6-AF74-4FFD-ADAA-256EF3455E7C}.Release|Any CPU.Build.0 = Release|Any CPU + {C3BE6FAC-E6F7-4830-91B4-4041BC00C70C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {C3BE6FAC-E6F7-4830-91B4-4041BC00C70C}.Debug|Any CPU.Build.0 = Debug|Any CPU + {C3BE6FAC-E6F7-4830-91B4-4041BC00C70C}.Release|Any CPU.ActiveCfg = Release|Any CPU + {C3BE6FAC-E6F7-4830-91B4-4041BC00C70C}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution - SolutionGuid = {1872402B-491D-4E69-9BFF-8EAA5BFE7F64} + SolutionGuid = {EA6447E2-6D5E-4522-AC43-4CFD46686C00} EndGlobalSection EndGlobal diff --git a/EmailCarbonFootprint/EmailCarbonFootprint/CarbonFootprintCalculator.cs b/EmailCarbonFootprint/EmailCarbonFootprint/CarbonFootprintCalculator.cs deleted file mode 100644 index 0e0f4b7..0000000 --- a/EmailCarbonFootprint/EmailCarbonFootprint/CarbonFootprintCalculator.cs +++ /dev/null @@ -1,19 +0,0 @@ -namespace EmailCarbonFootprint -{ - public class CarbonFootprintCalculator - { - public EmailModel CalculateCarbonFootprint(EmailModel email) - { - EmissionsData emissionsData = new EmissionsData(); - emissionsData.SpamCarbonFootprintKg = (email.SpamQuantity * EmissionsDataConstants.SpamEmission) / 1000; - emissionsData.ShortEmailOnPhoneCarbonFootprintKg = (email.ShortEmailOnPhoneQuantity * EmissionsDataConstants.ShortEmailOnPhoneEmission) / 1000; - emissionsData.ShortEmailInLaptopCarbonFootprintKg = (email.ShortEmailOnLaptopQuantity * EmissionsDataConstants.ShortEmailOnLaptopEmission) / 1000; - emissionsData.LongEmailOnLaptopCarbonFootprintKg = (email.LongEmailOnLaptopQuantity * EmissionsDataConstants.LongEmailOnLaptopEmission) / 1000; - emissionsData.EmailBlastCarbonFootprintKg = (email.EmailBlastQuantity * EmissionsDataConstants.EmailBlastEmission) / 1000; - - email.CarbonFootprintKg = emissionsData.SpamCarbonFootprintKg + emissionsData.ShortEmailInLaptopCarbonFootprintKg + emissionsData.ShortEmailOnPhoneCarbonFootprintKg + emissionsData.LongEmailOnLaptopCarbonFootprintKg + emissionsData.EmailBlastCarbonFootprintKg; - email.EmissionsData = emissionsData; - return email; - } - } -} diff --git a/EmailCarbonFootprint/EmailCarbonFootprint/EmailCarbonFootprintCalculator.cs b/EmailCarbonFootprint/EmailCarbonFootprint/EmailCarbonFootprintCalculator.cs new file mode 100644 index 0000000..d57d38c --- /dev/null +++ b/EmailCarbonFootprint/EmailCarbonFootprint/EmailCarbonFootprintCalculator.cs @@ -0,0 +1,24 @@ +namespace EmailCarbonFootprint +{ + public class EmailCarbonFootprintCalculator : ICarbonFootprintCalculator + { + private const double InboxEmissionPerEmail = 4.0; + private const double SentEmissionPerEmail = 0.2; + private const double SpamEmissionPerEmail = 0.3; + + public EmailEntityResponse CalculateCarbonFootprint(EmailEntity entity) + { + double inboxEmission = (entity.InboxCount * InboxEmissionPerEmail) / 1000; + double sentEmission = (entity.SentCount * SentEmissionPerEmail) / 1000; + double spamEmission = (entity.SpamCount * SpamEmissionPerEmail) / 1000; + + EmailEntityResponse response = new EmailEntityResponse(); + response.EmailId = entity.EmailId; + response.TotalInboxEmission = Math.Round(inboxEmission, 6); + response.TotalSentEmission = Math.Round(sentEmission, 6); + response.TotalSpamEmission = Math.Round(spamEmission, 6); + response.CalculateTotalEmission(); + return response; + } + } +} diff --git a/EmailCarbonFootprint/EmailCarbonFootprint/EmailEntity.cs b/EmailCarbonFootprint/EmailCarbonFootprint/EmailEntity.cs new file mode 100644 index 0000000..bc9074d --- /dev/null +++ b/EmailCarbonFootprint/EmailCarbonFootprint/EmailEntity.cs @@ -0,0 +1,30 @@ +namespace EmailCarbonFootprint +{ + public class EmailEntity + { + public string EmailId { get; set; } + public int InboxCount { get; set; } + public int SentCount { get; set; } + public int SpamCount { get; set; } + + public void GetDetails() + { + Console.Write("Enter the email address: "); + EmailId = Console.ReadLine(); + + if(EmailId == String.Empty) + { + throw new Exception("Email adress can not be empty"); + } + + Console.Write("Enter the number of inbox emails: "); + InboxCount = int.Parse(Console.ReadLine()); + + Console.Write("Enter the number of sent emails: "); + SentCount = int.Parse(Console.ReadLine()); + + Console.Write("Enter the number of spam emails: "); + SpamCount = int.Parse(Console.ReadLine()); + } + } +} diff --git a/EmailCarbonFootprint/EmailCarbonFootprint/EmailEntityResponse.cs b/EmailCarbonFootprint/EmailCarbonFootprint/EmailEntityResponse.cs new file mode 100644 index 0000000..bf39156 --- /dev/null +++ b/EmailCarbonFootprint/EmailCarbonFootprint/EmailEntityResponse.cs @@ -0,0 +1,26 @@ +namespace EmailCarbonFootprint +{ + public class EmailEntityResponse + { + public string EmailId { get; set; } + public double TotalInboxEmission { get; set; } + public double TotalSentEmission { get; set; } + public double TotalSpamEmission { get; set; } + private double TotalEmission; + + public void Display() + { + Console.WriteLine("Email Entity"); + Console.WriteLine($"Email Id: {EmailId}"); + Console.WriteLine($"Inbox Emission: {TotalInboxEmission} KG"); + Console.WriteLine($"Sent Emission: {TotalSentEmission} KG"); + Console.WriteLine($"Spam Emission: {TotalSpamEmission} KG"); + Console.WriteLine($"Total Carbon Footprint: {TotalEmission} KG"); + } + + public void CalculateTotalEmission() + { + TotalEmission = TotalInboxEmission + TotalSentEmission + TotalSpamEmission; + } + } +} diff --git a/EmailCarbonFootprint/EmailCarbonFootprint/EmailModel.cs b/EmailCarbonFootprint/EmailCarbonFootprint/EmailModel.cs deleted file mode 100644 index 49075ad..0000000 --- a/EmailCarbonFootprint/EmailCarbonFootprint/EmailModel.cs +++ /dev/null @@ -1,18 +0,0 @@ -namespace EmailCarbonFootprint -{ - public class EmailModel : EmailTypeQuantity - { - public string EmailId { get; set; } - public double CarbonFootprintKg { get; set; } - public EmissionsData EmissionsData { get; set; } - - public void DisplayEmailCarbonFootprint() - { - Console.WriteLine("Total Carbon Footprint"); - Console.WriteLine($"Email Id: {EmailId}"); - EmissionsData.DisplayCarbonEmission(); - Console.WriteLine($"Carbon Footprint: {CarbonFootprintKg} kg"); - } - } - -} diff --git a/EmailCarbonFootprint/EmailCarbonFootprint/EmailTypeQuantity.cs b/EmailCarbonFootprint/EmailCarbonFootprint/EmailTypeQuantity.cs deleted file mode 100644 index 5f89975..0000000 --- a/EmailCarbonFootprint/EmailCarbonFootprint/EmailTypeQuantity.cs +++ /dev/null @@ -1,11 +0,0 @@ -namespace EmailCarbonFootprint -{ - public class EmailTypeQuantity - { - public int SpamQuantity { get; set; } - public int ShortEmailOnPhoneQuantity { get; set; } - public int ShortEmailOnLaptopQuantity { get; set; } - public int LongEmailOnLaptopQuantity { get; set; } - public int EmailBlastQuantity { get; set; } - } -} diff --git a/EmailCarbonFootprint/EmailCarbonFootprint/EmissionsData.cs b/EmailCarbonFootprint/EmailCarbonFootprint/EmissionsData.cs deleted file mode 100644 index 231ba47..0000000 --- a/EmailCarbonFootprint/EmailCarbonFootprint/EmissionsData.cs +++ /dev/null @@ -1,20 +0,0 @@ -namespace EmailCarbonFootprint -{ - public class EmissionsData - { - public double SpamCarbonFootprintKg { get; set; } - public double ShortEmailOnPhoneCarbonFootprintKg { get; set; } - public double ShortEmailInLaptopCarbonFootprintKg { get; set; } - public double LongEmailOnLaptopCarbonFootprintKg { get; set; } - public double EmailBlastCarbonFootprintKg { get; set; } - - public void DisplayCarbonEmission() - { - Console.WriteLine($"Carbon footprint of spam emails: {SpamCarbonFootprintKg} kg"); - Console.WriteLine($"Carbon footprint of short emails sent on phone: {ShortEmailOnPhoneCarbonFootprintKg} kg"); - Console.WriteLine($"Carbon footprint of short emails sent on laptop: {ShortEmailInLaptopCarbonFootprintKg} kg"); - Console.WriteLine($"Carbon footprint of long emails sent on laptop: {LongEmailOnLaptopCarbonFootprintKg} kg"); - Console.WriteLine($"Carbon footprint of email blasts: {EmailBlastCarbonFootprintKg} kg"); - } - } -} diff --git a/EmailCarbonFootprint/EmailCarbonFootprint/EmissionsDataConstants.cs b/EmailCarbonFootprint/EmailCarbonFootprint/EmissionsDataConstants.cs deleted file mode 100644 index b86b1e0..0000000 --- a/EmailCarbonFootprint/EmailCarbonFootprint/EmissionsDataConstants.cs +++ /dev/null @@ -1,11 +0,0 @@ -namespace EmailCarbonFootprint -{ - public class EmissionsDataConstants - { - public static double SpamEmission = 0.03; - public static double ShortEmailOnPhoneEmission = 0.2; - public static double ShortEmailOnLaptopEmission = 0.3; - public static double LongEmailOnLaptopEmission = 17; - public static double EmailBlastEmission = 26; - } -} diff --git a/EmailCarbonFootprint/EmailCarbonFootprint/ICarbonFootprintCalculator.cs b/EmailCarbonFootprint/EmailCarbonFootprint/ICarbonFootprintCalculator.cs new file mode 100644 index 0000000..9a29290 --- /dev/null +++ b/EmailCarbonFootprint/EmailCarbonFootprint/ICarbonFootprintCalculator.cs @@ -0,0 +1,7 @@ +namespace EmailCarbonFootprint +{ + public interface ICarbonFootprintCalculator + { + EmailEntityResponse CalculateCarbonFootprint(EmailEntity entity); + } +} diff --git a/EmailCarbonFootprint/EmailCarbonFootprint/Program.cs b/EmailCarbonFootprint/EmailCarbonFootprint/Program.cs index a88e9a5..4e80e1b 100644 --- a/EmailCarbonFootprint/EmailCarbonFootprint/Program.cs +++ b/EmailCarbonFootprint/EmailCarbonFootprint/Program.cs @@ -6,25 +6,20 @@ static void Main(string[] args) { try { - var email = new EmailModel - { - EmailId = "abc@xyz.com", - SpamQuantity = 10, - ShortEmailOnLaptopQuantity = 10, - ShortEmailOnPhoneQuantity = 10, - LongEmailOnLaptopQuantity = 10, - EmailBlastQuantity = 10 - }; + EmailEntity emailEntity = new EmailEntity(); + emailEntity.GetDetails(); - var calculator = new CarbonFootprintCalculator(); - var result = calculator.CalculateCarbonFootprint(email); - result.DisplayEmailCarbonFootprint(); + ICarbonFootprintCalculator carbonFootprintCalculator = new EmailCarbonFootprintCalculator(); + EmailEntityResponse emailEntityResponse = carbonFootprintCalculator.CalculateCarbonFootprint(emailEntity); + + emailEntityResponse.Display(); Console.ReadLine(); } catch (Exception ex) { - Console.WriteLine(ex.ToString()); + Console.WriteLine("Some Error Occured!"); + Console.WriteLine(ex.Message); } } } From 016ea56bf314e6b6ed45254623b4b5e6adc78d90 Mon Sep 17 00:00:00 2001 From: Mukul Palol Date: Tue, 7 Nov 2023 10:00:47 +0530 Subject: [PATCH 5/5] refactored for meanigful names and SRP --- .../EmailCarbonFootprintCalculator.cs | 10 ++++----- .../EmailCarbonFootprint/EmailEntity.cs | 6 +++--- .../EmailEntityResponse.cs | 16 +++++++------- .../ICarbonFootprintCalculator.cs | 2 +- .../EmailCarbonFootprint/Program.cs | 21 ++++++++++++------- 5 files changed, 31 insertions(+), 24 deletions(-) diff --git a/EmailCarbonFootprint/EmailCarbonFootprint/EmailCarbonFootprintCalculator.cs b/EmailCarbonFootprint/EmailCarbonFootprint/EmailCarbonFootprintCalculator.cs index d57d38c..9df81db 100644 --- a/EmailCarbonFootprint/EmailCarbonFootprint/EmailCarbonFootprintCalculator.cs +++ b/EmailCarbonFootprint/EmailCarbonFootprint/EmailCarbonFootprintCalculator.cs @@ -6,14 +6,14 @@ public class EmailCarbonFootprintCalculator : ICarbonFootprintCalculator private const double SentEmissionPerEmail = 0.2; private const double SpamEmissionPerEmail = 0.3; - public EmailEntityResponse CalculateCarbonFootprint(EmailEntity entity) + public EmailEntityResponse CalculateCarbonFootprint(EmailEntity emailEntity) { - double inboxEmission = (entity.InboxCount * InboxEmissionPerEmail) / 1000; - double sentEmission = (entity.SentCount * SentEmissionPerEmail) / 1000; - double spamEmission = (entity.SpamCount * SpamEmissionPerEmail) / 1000; + double inboxEmission = (emailEntity.InboxCount * InboxEmissionPerEmail) / 1000; + double sentEmission = (emailEntity.SentCount * SentEmissionPerEmail) / 1000; + double spamEmission = (emailEntity.SpamCount * SpamEmissionPerEmail) / 1000; EmailEntityResponse response = new EmailEntityResponse(); - response.EmailId = entity.EmailId; + response.EmailId = emailEntity.EmailId; response.TotalInboxEmission = Math.Round(inboxEmission, 6); response.TotalSentEmission = Math.Round(sentEmission, 6); response.TotalSpamEmission = Math.Round(spamEmission, 6); diff --git a/EmailCarbonFootprint/EmailCarbonFootprint/EmailEntity.cs b/EmailCarbonFootprint/EmailCarbonFootprint/EmailEntity.cs index bc9074d..7fe89e2 100644 --- a/EmailCarbonFootprint/EmailCarbonFootprint/EmailEntity.cs +++ b/EmailCarbonFootprint/EmailCarbonFootprint/EmailEntity.cs @@ -7,14 +7,14 @@ public class EmailEntity public int SentCount { get; set; } public int SpamCount { get; set; } - public void GetDetails() + public void GetUserInput() { Console.Write("Enter the email address: "); EmailId = Console.ReadLine(); - if(EmailId == String.Empty) + if(string.IsNullOrEmpty(EmailId)) { - throw new Exception("Email adress can not be empty"); + throw new Exception("Email adress can not be empty."); } Console.Write("Enter the number of inbox emails: "); diff --git a/EmailCarbonFootprint/EmailCarbonFootprint/EmailEntityResponse.cs b/EmailCarbonFootprint/EmailCarbonFootprint/EmailEntityResponse.cs index bf39156..a773316 100644 --- a/EmailCarbonFootprint/EmailCarbonFootprint/EmailEntityResponse.cs +++ b/EmailCarbonFootprint/EmailCarbonFootprint/EmailEntityResponse.cs @@ -6,9 +6,14 @@ public class EmailEntityResponse public double TotalInboxEmission { get; set; } public double TotalSentEmission { get; set; } public double TotalSpamEmission { get; set; } - private double TotalEmission; + private double TotalEmission { get; set; } - public void Display() + public void CalculateTotalEmission() + { + TotalEmission = TotalInboxEmission + TotalSentEmission + TotalSpamEmission; + } + + public void DisplayTotalEmissionsDetail() { Console.WriteLine("Email Entity"); Console.WriteLine($"Email Id: {EmailId}"); @@ -16,11 +21,6 @@ public void Display() Console.WriteLine($"Sent Emission: {TotalSentEmission} KG"); Console.WriteLine($"Spam Emission: {TotalSpamEmission} KG"); Console.WriteLine($"Total Carbon Footprint: {TotalEmission} KG"); - } - - public void CalculateTotalEmission() - { - TotalEmission = TotalInboxEmission + TotalSentEmission + TotalSpamEmission; - } + } } } diff --git a/EmailCarbonFootprint/EmailCarbonFootprint/ICarbonFootprintCalculator.cs b/EmailCarbonFootprint/EmailCarbonFootprint/ICarbonFootprintCalculator.cs index 9a29290..fcbe7a1 100644 --- a/EmailCarbonFootprint/EmailCarbonFootprint/ICarbonFootprintCalculator.cs +++ b/EmailCarbonFootprint/EmailCarbonFootprint/ICarbonFootprintCalculator.cs @@ -2,6 +2,6 @@ { public interface ICarbonFootprintCalculator { - EmailEntityResponse CalculateCarbonFootprint(EmailEntity entity); + EmailEntityResponse CalculateCarbonFootprint(EmailEntity emailEntity); } } diff --git a/EmailCarbonFootprint/EmailCarbonFootprint/Program.cs b/EmailCarbonFootprint/EmailCarbonFootprint/Program.cs index 4e80e1b..f31d46d 100644 --- a/EmailCarbonFootprint/EmailCarbonFootprint/Program.cs +++ b/EmailCarbonFootprint/EmailCarbonFootprint/Program.cs @@ -7,19 +7,26 @@ static void Main(string[] args) try { EmailEntity emailEntity = new EmailEntity(); - emailEntity.GetDetails(); + emailEntity.GetUserInput(); ICarbonFootprintCalculator carbonFootprintCalculator = new EmailCarbonFootprintCalculator(); EmailEntityResponse emailEntityResponse = carbonFootprintCalculator.CalculateCarbonFootprint(emailEntity); - emailEntityResponse.Display(); - - Console.ReadLine(); + emailEntityResponse.DisplayTotalEmissionsDetail(); + } + catch (FormatException) + { + Console.WriteLine("An Error Occured:"); + Console.WriteLine("Invalid input format. Please enter valid numeric values."); } - catch (Exception ex) + catch (Exception exception) { - Console.WriteLine("Some Error Occured!"); - Console.WriteLine(ex.Message); + Console.WriteLine("An Error Occured:"); + Console.WriteLine(exception.Message); + } + finally + { + Console.ReadLine(); } } }