diff --git a/EmailCarbonFootprint/EmailCarbonFootprint.sln b/EmailCarbonFootprint/EmailCarbonFootprint.sln new file mode 100644 index 0000000..ca92c50 --- /dev/null +++ b/EmailCarbonFootprint/EmailCarbonFootprint.sln @@ -0,0 +1,25 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 17 +VisualStudioVersion = 17.7.34221.43 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "EmailCarbonFootprint", "EmailCarbonFootprint\EmailCarbonFootprint.csproj", "{C3BE6FAC-E6F7-4830-91B4-4041BC00C70C}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {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 = {EA6447E2-6D5E-4522-AC43-4CFD46686C00} + EndGlobalSection +EndGlobal diff --git a/EmailCarbonFootprint/EmailCarbonFootprint/EmailCarbonFootprint.csproj b/EmailCarbonFootprint/EmailCarbonFootprint/EmailCarbonFootprint.csproj new file mode 100644 index 0000000..74abf5c --- /dev/null +++ b/EmailCarbonFootprint/EmailCarbonFootprint/EmailCarbonFootprint.csproj @@ -0,0 +1,10 @@ + + + + Exe + net6.0 + enable + enable + + + diff --git a/EmailCarbonFootprint/EmailCarbonFootprint/EmailCarbonFootprintCalculator.cs b/EmailCarbonFootprint/EmailCarbonFootprint/EmailCarbonFootprintCalculator.cs new file mode 100644 index 0000000..9df81db --- /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 emailEntity) + { + double inboxEmission = (emailEntity.InboxCount * InboxEmissionPerEmail) / 1000; + double sentEmission = (emailEntity.SentCount * SentEmissionPerEmail) / 1000; + double spamEmission = (emailEntity.SpamCount * SpamEmissionPerEmail) / 1000; + + EmailEntityResponse response = new EmailEntityResponse(); + response.EmailId = emailEntity.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..7fe89e2 --- /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 GetUserInput() + { + Console.Write("Enter the email address: "); + EmailId = Console.ReadLine(); + + if(string.IsNullOrEmpty(EmailId)) + { + 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..a773316 --- /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 { get; set; } + + public void CalculateTotalEmission() + { + TotalEmission = TotalInboxEmission + TotalSentEmission + TotalSpamEmission; + } + + public void DisplayTotalEmissionsDetail() + { + 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"); + } + } +} diff --git a/EmailCarbonFootprint/EmailCarbonFootprint/ICarbonFootprintCalculator.cs b/EmailCarbonFootprint/EmailCarbonFootprint/ICarbonFootprintCalculator.cs new file mode 100644 index 0000000..fcbe7a1 --- /dev/null +++ b/EmailCarbonFootprint/EmailCarbonFootprint/ICarbonFootprintCalculator.cs @@ -0,0 +1,7 @@ +namespace EmailCarbonFootprint +{ + public interface ICarbonFootprintCalculator + { + EmailEntityResponse CalculateCarbonFootprint(EmailEntity emailEntity); + } +} diff --git a/EmailCarbonFootprint/EmailCarbonFootprint/Program.cs b/EmailCarbonFootprint/EmailCarbonFootprint/Program.cs new file mode 100644 index 0000000..f31d46d --- /dev/null +++ b/EmailCarbonFootprint/EmailCarbonFootprint/Program.cs @@ -0,0 +1,33 @@ +namespace EmailCarbonFootprint +{ + internal class Program + { + static void Main(string[] args) + { + try + { + EmailEntity emailEntity = new EmailEntity(); + emailEntity.GetUserInput(); + + ICarbonFootprintCalculator carbonFootprintCalculator = new EmailCarbonFootprintCalculator(); + EmailEntityResponse emailEntityResponse = carbonFootprintCalculator.CalculateCarbonFootprint(emailEntity); + + emailEntityResponse.DisplayTotalEmissionsDetail(); + } + catch (FormatException) + { + Console.WriteLine("An Error Occured:"); + Console.WriteLine("Invalid input format. Please enter valid numeric values."); + } + catch (Exception exception) + { + Console.WriteLine("An Error Occured:"); + Console.WriteLine(exception.Message); + } + finally + { + Console.ReadLine(); + } + } + } +} \ No newline at end of file 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/